2015-12-17 3 views
1

У меня есть эти два файла:Go: "экземпляр" повторно объявлен в этом блоке

daoFactory.go

package dao 

import "sync" 

type daoFactory struct {} 

var instance *daoFactory 

//some functions 

fakeProvisionDao.go

package dao 

import (
    "sync" 
    "model" 
) 

type provisionDao struct { 
} 

var instance *provisionDao 

//some functions 

Оба в такой же упаковка: dao.

Я получаю эту ошибку:

"instance" redeclared in this block

Очевидно, причина в том, что instance переменная объявлена ​​в обоих файлах. Я начинаю в программировании Go, и я не знаю, как мне обращаться с этой ошибкой.

+4

Не объявляйте «экземпляр» во второй раз. – JimB

+0

Привет, снова. Но где я должен объявить это? Есть ли какое-либо соглашение для этого? –

+3

Вы уже читали документы? [Как написать код перехода] (https://golang.org/doc/code.html), [Эффективный переход] (https://golang.org/doc/effective_go.html), [Tour of Go] (http : //tour.golang.org/) – JimB

ответ

3

Файлы не имеют реального смысла для перехода, в отличие от java, python и многих других, они предназначены только для того, чтобы вы упорядочили свой код по своему усмотрению.

В переменных перемещения видны package широкий, это означает, что оба объявления instance являются переменными с широкой видимостью пакета. Следовательно, компилятор жалуется на наличие двух глобальных переменных с тем же именем.

Переименуйте любую из двух переменных экземпляра и скомпилируйте ее.

Чтение ссылок в примечаниях выше настоятельно рекомендуется ;-)

Смежные вопросы