Golang读取.env配置文件的几种方式
在Golang项目中读取.env配置文件有哪些常用的方法?不同方法之间有什么优缺点?比如使用第三方库如godotenv与标准库方案相比,在易用性、性能或功能支持上有哪些差异?是否需要考虑线程安全或热加载等特殊需求?求推荐最佳实践方案。
2 回复
在Golang中读取.env文件主要有以下几种方式:
-
使用第三方库(推荐)
import "github.com/joho/godotenv" err := godotenv.Load() // 或者指定文件路径 err := godotenv.Load(".env.local") -
手动解析 可以自己实现简单的解析逻辑:
file, _ := os.Open(".env") scanner := bufio.NewScanner(file) for scanner.Scan() { line := strings.TrimSpace(scanner.Text()) if !strings.HasPrefix(line, "#") && strings.Contains(line, "=") { parts := strings.SplitN(line, "=", 2) os.Setenv(parts[0], parts[1]) } } -
结合flag包
var envFile string flag.StringVar(&envFile, "env", ".env", "环境配置文件路径") flag.Parse() godotenv.Load(envFile)
推荐使用godotenv库,它支持多文件加载、环境变量覆盖等特性,代码简洁可靠。手动解析适合简单场景,但缺少错误处理和高级功能。
更多关于Golang读取.env配置文件的几种方式的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
在 Golang 中读取 .env 配置文件有多种方式,以下是常见的几种方法:
1. 使用 godotenv 库(推荐)
这是最常用的方式,通过第三方库 github.com/joho/godotenv 加载 .env 文件到环境变量中。
安装:
go get github.com/joho/godotenv
示例代码:
package main
import (
"log"
"os"
"github.com/joho/godotenv"
)
func main() {
// 加载 .env 文件
err := godotenv.Load()
if err != nil {
log.Fatal("Error loading .env file")
}
// 读取环境变量
dbHost := os.Getenv("DB_HOST")
dbPort := os.Getenv("DB_PORT")
log.Printf("DB Host: %s, DB Port: %s", dbHost, dbPort)
}
2. 手动解析文件
如果不想依赖第三方库,可以手动读取和解析 .env 文件。
示例代码:
package main
import (
"bufio"
"log"
"os"
"strings"
)
func loadEnvFile(filename string) error {
file, err := os.Open(filename)
if err != nil {
return err
}
defer file.Close()
scanner := bufio.NewScanner(file)
for scanner.Scan() {
line := strings.TrimSpace(scanner.Text())
if line == "" || strings.HasPrefix(line, "#") {
continue // 跳过空行和注释
}
parts := strings.SplitN(line, "=", 2)
if len(parts) != 2 {
continue // 跳过格式错误的行
}
key := strings.TrimSpace(parts[0])
value := strings.TrimSpace(parts[1])
// 设置环境变量(仅当前进程)
os.Setenv(key, value)
}
return scanner.Err()
}
func main() {
err := loadEnvFile(".env")
if err != nil {
log.Fatal("Error loading .env file:", err)
}
dbHost := os.Getenv("DB_HOST")
log.Println("DB Host:", dbHost)
}
3. 结合 flag 库指定文件路径
通过命令行参数动态指定 .env 文件路径。
示例代码:
package main
import (
"flag"
"log"
"github.com/joho/godotenv"
)
func main() {
envFile := flag.String("env", ".env", "Path to .env file")
flag.Parse()
err := godotenv.Load(*envFile)
if err != nil {
log.Fatal("Error loading .env file:", err)
}
dbHost := os.Getenv("DB_HOST")
log.Println("DB Host:", dbHost)
}
总结
- 推荐使用
godotenv:简单可靠,支持多文件加载和默认值设置。 - 手动解析:适合轻量需求或避免第三方依赖。
- 动态路径:适合需要灵活配置环境的场景。
根据项目需求选择合适的方式即可。

