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

使用godotenv加载.env文件时,非绝对路径加载失败求解决方案

排查思路
  • 检查程序运行的工作目录
    相对路径是基于程序启动时的工作目录,而非代码文件所在目录。可以在init函数开头添加代码打印当前工作目录确认:

    import "os"
    
    func init() {
        wd, err := os.Getwd()
        if err != nil {
            panic(err)
        }
        println("当前工作目录:", wd)
        // 后续加载.env的代码
    }
    

    比如你在/home/peter目录下执行go run Documents/tests/configuration/config.go,工作目录是/home/peter,而非代码所在的/home/peter/Documents/tests/configuration,自然找不到.env文件。

  • 规范go run/go build的执行位置
    使用go run时,先切换到.env所在目录再执行命令:

    cd /home/peter/Documents/tests/configuration
    go run config.go
    

    若编译成二进制文件,运行时需确保工作目录是.env所在目录,或把.env放到二进制文件的运行目录下。

  • 调整IDE的运行配置(若用IDE开发)
    多数IDE默认以项目根目录作为运行工作目录,而非代码文件所在的子目录。需要在IDE的运行配置中,将工作目录修改为.env所在的configuration目录。

  • 用代码动态构造.env路径
    若需要从任意目录运行程序,可通过代码获取当前文件的路径,再拼接.env的绝对路径:

    import "path/filepath"
    import "runtime"
    
    func init() {
        _, filename, _, ok := runtime.Caller(0)
        if !ok {
            panic("无法获取当前文件路径")
        }
        dir := filepath.Dir(filename)
        envPath := filepath.Join(dir, ".env")
        err := godotenv.Load(envPath)
        if err != nil {
            panic(err)
        }
        Config = GetConfig()
    }
    

    这种方式能确保无论从哪个目录运行,都能找到代码同目录下的.env文件。

  • 验证文件本身的合法性
    用ls -b .env查看文件名称是否包含隐藏特殊字符(如空格、不可见字符);用ls -l .env检查文件权限,确保程序拥有读取该文件的权限(至少要有读权限r)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 07:10:32