Golang中如何加载.env环境变量
Golang中如何加载.env环境变量 我正在尝试使用以下代码加载 .env 变量:
dbConn := os.Getenv("DB")
fmt.Println("DB": , dbConn)
但这不起作用,我该如何加载变量?
5 回复
你好,我可以直接从 .env 文件中读取它们吗? 为什么我必须设置它们?
更多关于Golang中如何加载.env环境变量的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
您可以读取任何您喜欢的文件,但这并非环境变量的意义所在。环境变量 - 维基百科
.env(“dotenv”)文件似乎是相对较新的东西,Go 语言并未内置对其的支持。你需要找到一个第三方库来读取你的 dotenv 文件并将其数据加载到进程的环境变量中,例如 joho/godotenv: A Go port of Ruby’s dotenv library (Loads environment variables from .env.) (github.com)。
对我有效(注意我修复了冒号在引号外的错误):
C:\path>type printenvvar.go
package main
import (
"fmt"
"os"
)
func main() {
dbConn := os.Getenv("DB")
fmt.Println("DB:", dbConn)
}
C:\path>set DB=db from env
C:\path>go run printenvvar.go
DB: db from env
在Go中直接使用os.Getenv()只能读取系统环境变量,要加载.env文件需要使用第三方库。以下是两种常用方法:
1. 使用github.com/joho/godotenv(推荐)
package main
import (
"fmt"
"log"
"os"
"github.com/joho/godotenv"
)
func main() {
// 加载.env文件
err := godotenv.Load()
if err != nil {
log.Fatal("Error loading .env file")
}
// 现在可以读取环境变量
dbConn := os.Getenv("DB")
fmt.Println("DB:", dbConn)
// 也可以指定文件路径
// godotenv.Load(".env.local", ".env")
}
2. 使用github.com/caarlos0/env(支持结构体绑定)
package main
import (
"fmt"
"log"
"github.com/caarlos0/env/v10"
"github.com/joho/godotenv"
)
type Config struct {
DB string `env:"DB,required"`
Port int `env:"PORT" envDefault:"8080"`
Debug bool `env:"DEBUG" envDefault:"false"`
}
func main() {
// 先加载.env文件
if err := godotenv.Load(); err != nil {
log.Printf("Warning: .env file not found")
}
var cfg Config
if err := env.Parse(&cfg); err != nil {
log.Fatal(err)
}
fmt.Printf("DB: %s\n", cfg.DB)
fmt.Printf("Port: %d\n", cfg.Port)
}
3. 自定义简单实现
如果不想引入依赖,可以自己实现:
package main
import (
"bufio"
"fmt"
"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 := scanner.Text()
if len(line) == 0 || line[0] == '#' {
continue
}
parts := strings.SplitN(line, "=", 2)
if len(parts) == 2 {
key := strings.TrimSpace(parts[0])
value := strings.TrimSpace(parts[1])
os.Setenv(key, value)
}
}
return scanner.Err()
}
func main() {
if err := loadEnvFile(".env"); err != nil {
fmt.Println("Warning:", err)
}
dbConn := os.Getenv("DB")
fmt.Println("DB:", dbConn)
}
安装godotenv:
go get github.com/joho/godotenv
.env文件示例:
DB=postgres://user:password@localhost:5432/dbname
PORT=8080
DEBUG=true
第一种方法最常用,godotenv库稳定且维护良好。

