golang中使用.env方法

在 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"])

安全建议

  1. 永远不要提交 .env 到 Git # .gitignore .env .env.local *.env
  2. 生产环境优先使用系统环境变量
    • 在 Docker / Kubernetes / 云服务器中,直接通过 -e 或 Secret 注入
    • .env 仅用于本地开发
  3. 敏感信息不要硬编码
    • 即使在 .env 中,也要确保文件权限安全(chmod 600 .env

Comments

No comments yet. Why don’t you start the discussion?

发表回复