# #go
Вопрос:
Я не могу инициализировать структуру, даже если она не показывает никаких ошибок компоновки, она выдает ошибку при компиляции
Ошибка
$ go run main.go
# command-line-arguments
.main.go:19:10: undefined: Application
Вот структура:
/* app.go */
type Application struct {
config struct {
port string // to be read from the command line flag
env string // to be read from the command line flag
api string // to be read from the command line flag
stripe struct {
secret string // to be read from the environment variable
key string // to be read from the environment variable
}
}
infoLog *log.Logger
errorLog *log.Logger
templateCache map[string]*template.Template
version string
DB *sql.DB
Router *mux.Router
}
И вот как я его инициализирую:
/* main.go */
app := Application{}
Полный код кода находится здесь
Был бы очень признателен за помощь, спасибо!
Комментарии:
1. Находятся ли эти два файла в одном пакете?
2. Не используйте go run, используйте go build.
Ответ №1:
Попробуйте запустить go run .
(здесь вы передаете папку вместо файлов) или go run main.go app.go routes.go
.
Если вы просто запустите go run main.go
его, он загрузит только main.go, который не имеет прямой ссылки на другие файлы, поэтому он не сможет найти структуру, определенную в других файлах. Передавая папку, содержащую все основные файлы пакета, или передавая все файлы явно, тогда нет никакой путаницы.
Комментарии:
1. Я сам столкнулся с этой проблемой. Я обнаружил, что если мне нужно несколько файлов, проще поместить дополнительные файлы в неосновные пакеты, чтобы основной файл мог ссылаться на них. Лучше организованный код, и эта проблема исчезнет.