go项目需用github.com/joho/godotenv显式加载.env文件,因标准库不支持自动读取;推荐overload覆盖变量,注意格式规范(等号无空格、值含空格需引号),生产环境禁用.env而应使用平台原生环境注入机制。
Go 项目里不能直接读 .env 文件
Go 标准库不支持自动加载 .env 文件,所有环境变量必须显式读取或由第三方库解析。如果你直接运行 go run main.go 而没提前用 source .env 或 env $(cat .env | xargs) go run main.go,os.Getenv 拿到的全是空值。
推荐用 github.com/joho/godotenv 加载 .env
这是最轻量、最常用的选择,兼容大多数 .env 语法(注释、引号、变量内插等),且不侵入全局 os.Environ(),可按需调用 godotenv.Load 或 godotenv.Overload。
-
godotenv.Load(".env"):只加载,不覆盖已存在的环境变量 -
godotenv.Overload(".env"):加载并覆盖同名变量(适合本地开发覆盖默认值) - 文件路径支持相对路径,建议用
filepath.Join(".", ".env")显式指定,避免工作目录影响 - 务必在
main()开头尽早调用,否则依赖环境变量的初始化(如数据库连接)会失败
示例:
func main() {
if err := godotenv.Overload(); err != nil {
log.Fatal("加载 .env 失败:", err)
}
dbUser := os.Getenv("DB_USER")
// ...
}
注意 .env 文件格式陷阱
看似简单的键值对,实际容易因格式问题静默失败: