Перейти: Не удалось инициализировать структуру

# #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. Я сам столкнулся с этой проблемой. Я обнаружил, что если мне нужно несколько файлов, проще поместить дополнительные файлы в неосновные пакеты, чтобы основной файл мог ссылаться на них. Лучше организованный код, и эта проблема исчезнет.