You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言读取.env环境变量失败,仅获默认值求助

解决Go中使用caarlos0/env无法读取.env文件的问题

问题核心在于:github.com/caarlos0/env/v11库的env.Parse函数仅读取系统环境变量,不会自动加载.env文件内容。要解决这个问题,需要先将.env文件中的变量注入到系统环境变量中,再通过env.Parse解析。

步骤1:安装.env加载依赖

使用godotenv库来加载.env文件,执行以下命令安装:

go get github.com/joho/godotenv

步骤2:修改main.go代码

在env.Parse之前添加.env文件加载逻辑,修改后的代码如下:

package main

import (
    "log"

    "github.com/caarlos0/env/v11"
    "github.com/joho/godotenv"
)

type LocalConfig struct {
    Host       string `env:"DB_HOST"`
    DBPort     int    `env:"DB_PORT"`
    DBUser     string `env:"DB_USER"`
    DBPassword string `env:"DB_PASSWORD"`
    DBName     string `env:"DB_NAME"`
    Port       int    `env:"SERVER_PORT"`
}

func main() {
    // 加载根目录下的.env文件到系统环境变量
    if err := godotenv.Load(); err != nil {
        log.Printf("Warning: 未找到或无法加载.env文件: %v", err)
        // 若无需强制依赖.env,可继续执行,后续将使用系统环境变量
    }

    var localconfig LocalConfig
    if err := env.Parse(&localconfig); err != nil {
        log.Fatalf("读取环境变量失败: %v", err)
        return
    }
    log.Printf("%+v\n", localconfig)
}

步骤3:确认.env文件格式与位置

确保.env文件位于项目根目录,内容格式正确(键值对形式,无引号包裹):

DB_HOST=localhost
DB_PORT=5432
DB_USER=postgres
DB_PASSWORD=123456
DB_NAME=mydb
SERVER_PORT=8080

补充说明

  • 如果你的.env文件不在根目录,可以指定路径,比如godotenv.Load("./config/.env")
  • 若系统环境变量中存在同名变量,会覆盖.env中的值(优先级:系统环境变量 > .env文件)

内容的提问来源于stack exchange,提问作者Ashish Tripathi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 19:13:14