GoLand运行配置中环境变量必须在Edit Configurations里显式填写,否则os.Getenv一定返回空字符串,因其启动程序时使用干净子进程,不继承shell、系统或IDE全局环境。

GoLand 运行配置里的环境变量,必须在 Edit Configurations 中显式填写,否则 os.Getenv 一定读不到——系统变量、IDE 全局 Go Environment、终端 export 都不生效。
为什么 os.Getenv 总是返回空字符串
根本原因是 GoLand 启动你的程序(包括 go run、go test、调试器)时,用的是干净子进程,它不会自动继承 shell 或系统环境。即使你在终端里执行了 export DB_HOST=localhost,或者在 Settings → Go → Go Environment 里加了 DB_HOST,这些都不会传给运行中的 main 函数。
常见误操作包括:
- 把变量填在
Program arguments栏(那是传给os.Args的,不是环境变量) - 只改了
Go Environment却没碰Run Configuration的Environment variables - 用了中文等号、空格或引号(如
DB_HOST = "localhost"),GoLand 会解析失败
Edit Configurations 里怎么填才有效
打开右上角运行配置下拉菜单 → Edit Configurations… → 选中当前配置(比如 Go Build 或 Go Test)→ 找到 Environment variables 区域 → 点右侧 … 按钮。
在弹出窗口中逐行添加键值对,格式为:
GoLand 2026.1.1 是 2026.1 发布后的首个维护修正版本,适合已经开始体验 2026.1 新功能并希望同步补丁的开发者。它更适合用于入门项目、现有项目迁移测试和 IDE 行为验证。
DB_HOST=localhost LOG_LEVEL=debug ENV=test
注意:
- 变量名和值之间用英文等号
=,**不要加空格** - 值里含空格或特殊字符(如
http://localhost:8080/path?x=1)也不用引号,GoLand 自动处理 - 若需多组变量,换行写,不要用分号或冒号拼成一行(旧文档里写的
KEY=VAL;KEY2=VAL2是过时写法) - 勾选
Include system environment variables可保留HOME、USER等基础变量,建议勾上
测试是否真的生效了
最直接的办法是在代码里加一行临时日志:
func TestSomething(t *testing.T) {
t.Log("DB_HOST =", os.Getenv("DB_HOST"))
}
运行后看控制台输出。如果还是空,重点检查三处:
- 是不是填到了
Program arguments而不是Environment variables - 运行配置是否选对了(比如你改的是
Go Build,但实际点的是Go Test) - 有没有保存配置:点完
OK后,还要点左下角Apply和右下角OK,缺一不可
多个运行配置之间变量会不会串
不会。每个运行配置(包括 Templates 下的默认模板)都独立保存自己的 Environment variables。但容易被忽略的是:Templates → Go Build 改了,不代表 Templates → Go Test 或某个具体命名的 TestAuth 配置也同步更新了。如果你发现测试能读到变量、调试却读不到,大概率是后者漏配了 GO111MODULE=on 或 DB_DSN。
真正麻烦的地方在于:这些变量只作用于 IDE 内部启动的进程,不影响你在 Terminal 标签页里手动敲的 go run —— 那里走的是系统环境,和配置完全隔离。

















