goland不继承系统环境变量,必须在ide内显式配置:run configuration中设goos/goarch仅影响go run进程,对go build交叉编译无效;settings→go→environment variables中需填go111module=on、goproxy=https://goproxy.cn,direct、gosumdb=off等全局变量。

GoLand 本身不继承系统环境变量,你写的 GOOS=linux 或 GOPROXY=https://goproxy.cn 不会自动生效——必须在 IDE 内显式配置,且不同用途要填在不同位置。
Run Configuration 里设的环境变量只影响单次运行
这是最常用也最容易误解的地方。你在「Edit Configurations → Environment variables」里填的值,只作用于当前运行/调试的进程,比如 go run main.go 或你启动的 HTTP 服务。
- 它对
go build是否交叉编译完全无效:填GOOS=windows不会让生成的二进制变成 Windows 可执行文件 - 它对
go mod download也无效:模块拉取走的是 Go 工具链自己的环境快照,不是 IDE 配置项 - 若项目依赖
.env文件(如用godotenv.Load()),这个配置不会自动加载该文件——你得自己在代码里调用,且确保工作目录是项目根目录(Working directory设为$ProjectFileDir$) - Windows 下注意
.env文件编码必须是 UTF-8 无 BOM,否则godotenv解析失败但不报错,变量为空
Settings → Go → Environment Variables 是全局 SDK 级别配置
这里填的变量会被 GoLand 所有 Go 相关操作读取,包括 go list -m all、go mod tidy、甚至 gopls 启动时的环境上下文。
GoLand 2026.1.1 是 2026.1 发布后的首个维护修正版本,适合已经开始体验 2026.1 新功能并希望同步补丁的开发者。它更适合用于入门项目、现有项目迁移测试和 IDE 行为验证。
- 必须手动添加
GO111MODULE=on:不设这个,IDE 内部模块解析会 fallback 到 GOPATH 模式,导致go mod命令报not in a module -
GOPROXY必须带,direct后缀:只写https://goproxy.cn会导致私有包或未同步镜像的包拉取失败 -
GOSUMDB=off在内网或离线环境是刚需:否则go get会卡在 checksum 校验,连超时都不报 - 不要在这里填
GOROOT或GOPATH:它们属于 SDK 路径配置范畴,填在这里反而可能和实际路径冲突
Terminal 里的环境变量由系统决定,GoLand 不接管
GoLand 自带的 Terminal 默认不读取你的 shell 配置(如 ~/.zshrc),所以即使你在终端里 go version 正常,IDE 内置 Terminal 仍可能报 command not found。
- 解决办法:进入
Settings → Tools → Terminal,把Shell path改成你日常用的 shell,例如/bin/zsh或C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe - 改完后必须关闭并重开 Terminal 标签页,旧会话不会刷新环境
- 如果
go install golang.org/x/tools/gopls@latest成功但 GoLand 仍提示gopls not found,大概率是 Terminal 没继承$GOPATH/bin或$GOBIN——检查echo $PATH输出是否含对应路径
代码模板(Live Template)根本读不到任何环境变量
别在 Live Template 里写 $ENV{LOG_LEVEL} 或 $ENV{GOPROXY},它只会原样输出字符串,不会做任何替换。
- Live Template 是纯静态文本生成器,不调用
os.Getenv(),也不访问 shell 或 IDE 的环境变量上下文 - 想让代码运行时拿到值,就老老实实用
os.Getenv("XXX"),并在逻辑里处理默认值 - 如果只是想新建文件时填入固定公司内部地址,可用 File Template +
const块,而不是幻想模板能“动态读取”
真正卡住人的从来不是“怎么填”,而是填完没验证:改完任一环境变量后,务必在 GoLand 终端里运行 go env | grep -i "goos\|goproxy\|go111module",确认输出和你预期一致——因为 IDE 的缓存机制会让旧值 linger 很久,重启 IDE 有时比 reload project 更可靠。










