Go语言读取.env环境变量失败,仅获默认值求助
解决Go中使用caarlos0/env无法读取.env文件的问题
问题核心在于:github.com/caarlos0/env/v11库的env.Parse函数仅读取系统环境变量,不会自动加载.env文件内容。要解决这个问题,需要先将.env文件中的变量注入到系统环境变量中,再通过env.Parse解析。
步骤1:安装.env加载依赖
使用godotenv库来加载.env文件,执行以下命令安装:
go get github.com/joho/godotenv
步骤2:修改main.go代码
在env.Parse之前添加.env文件加载逻辑,修改后的代码如下:
package main import ( "log" "github.com/caarlos0/env/v11" "github.com/joho/godotenv" ) type LocalConfig struct { Host string `env:"DB_HOST"` DBPort int `env:"DB_PORT"` DBUser string `env:"DB_USER"` DBPassword string `env:"DB_PASSWORD"` DBName string `env:"DB_NAME"` Port int `env:"SERVER_PORT"` } func main() { // 加载根目录下的.env文件到系统环境变量 if err := godotenv.Load(); err != nil { log.Printf("Warning: 未找到或无法加载.env文件: %v", err) // 若无需强制依赖.env,可继续执行,后续将使用系统环境变量 } var localconfig LocalConfig if err := env.Parse(&localconfig); err != nil { log.Fatalf("读取环境变量失败: %v", err) return } log.Printf("%+v\n", localconfig) }
步骤3:确认.env文件格式与位置
确保.env文件位于项目根目录,内容格式正确(键值对形式,无引号包裹):
DB_HOST=localhost DB_PORT=5432 DB_USER=postgres DB_PASSWORD=123456 DB_NAME=mydb SERVER_PORT=8080
补充说明
- 如果你的
.env文件不在根目录,可以指定路径,比如godotenv.Load("./config/.env") - 若系统环境变量中存在同名变量,会覆盖
.env中的值(优先级:系统环境变量 > .env文件)
内容的提问来源于stack exchange,提问作者Ashish Tripathi
相关产品推荐
相关产品推荐

