在 Go(Golang)中使用 .env 文件,官方标准库不直接支持,但可以通过第三方库轻松实现。最流行、轻量且稳定的库是 godotenv。
推荐方案:使用 godotenv
第一步:安装库
go get github.com/joho/godotenv
第二步:创建 .env 文件(项目根目录)
# .env
APP_NAME=MyMonitor
PORT=8080
⚠️ 注意:
- 不要提交
.env到 Git(加到.gitignore)- 值不要加引号(除非包含空格或特殊字符)
第三步:在 Go 代码中加载 .env
package main
import (
"fmt"
"log"
"os"
"time"
"github.com/joho/godotenv"
)
func main() {
// 加载 .env 文件
if err := godotenv.Load(); err != nil {
log.Println("⚠️ 未找到 .env 文件,使用系统环境变量")
}
// 读取配置
appName := os.Getenv("APP_NAME")
port := os.Getenv("PORT")
// 转换类型(字符串 → 其他)
checkInterval, _ := time.ParseDuration(os.Getenv("CHECK_INTERVAL"))
logCheckInterval, _ := time.ParseDuration(os.Getenv("LOG_CHECK_INTERVAL"))
fmt.Printf("应用: %s\n", appName)
fmt.Printf("端口: %s\n", port)
fmt.Printf("钉钉 Token: %s\n", token)
fmt.Printf("日志路径: %s\n", logPath)
fmt.Printf("检查间隔: %v\n", checkInterval)
fmt.Printf("日志分析间隔: %v\n", logCheckInterval)
}
高级用法
1. 指定 .env 文件路径
// 加载自定义路径的 env 文件
godotenv.Load("/path/to/config/.env")
// 或多个文件
godotenv.Load(".env.local", ".env")
2. 仅加载,不覆盖已有环境变量
// 如果系统已有 DINGTALK_TOKEN,则不会被 .env 覆盖
godotenv.Load()
godotenv.Load()默认行为:只设置未定义的环境变量,安全!
3. 强制覆盖(谨慎使用)
// 覆盖已有环境变量
_ = godotenv.OverLoad()
4. 读取为 map(不注入环境变量)
envMap, err := godotenv.Read()
if err != nil {
log.Fatal(err)
}
fmt.Println(envMap["DINGTALK_TOKEN"])
安全建议
- 永远不要提交
.env到 Git# .gitignore .env .env.local *.env - 生产环境优先使用系统环境变量
- 在 Docker / Kubernetes / 云服务器中,直接通过
-e或 Secret 注入 .env仅用于本地开发
- 在 Docker / Kubernetes / 云服务器中,直接通过
- 敏感信息不要硬编码
- 即使在
.env中,也要确保文件权限安全(chmod 600 .env)
- 即使在