DbPassword = os.Getenv("DB_PASSWORD")
DbName = os.Getenv("DB_NAME")
DbHost = os.Getenv("DB_HOST")
DbPort = os.Getenv("DB_PORT")
)
func init() {
err := godotenv.Load(".env")
if err != nil {
log.Fatalln("Unable load .env file: ", err)
}
}
Так нельзя получать переменные? Таким способом ничего не приходит, но если вручную доставать в функции то всё ок
Вы сначала инициировали переменные, а потом вызвали загрузку .env файла
Нет, переменные будут обращаться к окружению
я это и хотел сказать, но поздно увидел, что сам напечатал
До или после инициализации нет разницы
у меня практически такой же кусок кода в своем проекте, сначала я подгружаю .env, потом достаю уже данные в main
ну я попробовал, именно если в функции это делать всё нормально
у меня в init загрузка .env, в main достаю переменные, всё работает
С тем, что вы прислали, разница есть.
есть же
Ну попробовал я перемещать, и до и после. Оно заработало так var ( DbUser string DbPassword string DbName string DbHost string DbPort string ) func getEnvVariables() { DbUser = os.Getenv("DB_USER") DbPassword = os.Getenv("DB_PASSWORD") DbName = os.Getenv("DB_NAME") DbHost = os.Getenv("DB_HOST") DbPort = os.Getenv("DB_PORT") } func init() { err := godotenv.Load(".env") if err != nil { log.Fatalln("Unable load .env file: ", err) } }
может потому что init выполнится первым, а функция, которая достает переменные вторым?
Я говорю, я пробовал перемещать переменные после init, не робит. Эти переменные что до, что после именно в функциях достаются
вопрос не ясен что такое “ничего не приходит”?
вывожу переменную и рядом в ручную os.Getenv. Только вторая приходит
os.Getenv отработает до того, как будет вызван godotenv и ничего не произойдет. Это ожидаемое поведение. Можете посмотреть примеры в godotenv
func initVars() { // тут можно динамически путь умнее обрабатывать, просто для примера натравливаем туда, где .env godotenv.Load(fmt.Sprintf("%s.env", "../../")) godotenv.Load(fmt.Sprintf("%s.env.%s", "../../", "dev")) vars := Vars{} envconfig.MustProcess("", &vars) }
Обсуждают сегодня