powershell执行策略不放开会导致choco install go静默失败,go.exe不在path中;必须先以管理员身份运行set-executionpolicy remotesigned -scope currentuser,重启powershell后安装并验证go version。

PowerShell执行策略不放开,choco install go 会静默失败
Chocolatey在Windows上默认被PowerShell执行策略阻止运行脚本,choco install go 看似执行成功,实则只装了空壳——go.exe 不在 PATH 中,go version 报“不是内部或外部命令”。这不是Chocolatey的问题,而是PowerShell的默认安全机制在起作用。
必须先以管理员身份打开PowerShell,执行:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
注意:-Scope CurrentUser 比 LocalMachine 更安全,且不影响系统其他用户;RemoteSigned 允许本地脚本执行,同时要求从网络下载的脚本带有效签名——Chocolatey满足该条件。
- 执行后重启 PowerShell(不是 cmd),再运行
choco install go - 验证是否生效:
go version应输出类似go version go1.21.11 windows/amd64 - 若仍失败,检查
$env:PATH是否含C:ProgramDatachocolateyin(Chocolatey默认安装路径)
go env -w 在PowerShell里写入环境变量会失效
PowerShell对go env -w的处理和cmd不同:它不会自动刷新当前会话的环境变量,也不会持久化到用户profile。你执行go env -w GOPATH=C:Usersmego后,go env GOPATH立刻显示新值,但新开一个PowerShell窗口就还原——因为go env -w只改注册表或配置文件,而PowerShell默认不读取Go的配置文件(%USERPROFILE%AppDataLocalgoenv)。
正确做法是绕过go env -w,直接编辑PowerShell profile:
notepad $PROFILE
追加两行(路径按实际调整):
$env:GOPATH = "C:Usersmego" $env:PATH += ";$env:GOPATHin"
- 保存后重启PowerShell,
go env GOPATH和go env GOBIN才真正稳定 - 务必手动创建目录:
mkdir C:Usersmegosrc, C:Usersmegoin,否则go get或go install会报错 - 不要设
GOROOT——Chocolatey安装的Go已自动注册,手动设反而容易指向旧版本
模块初始化时go mod init 报 go: cannot find main module
这个错误不是环境没配好,而是你在非项目根目录下执行了go run或go build。Go模块模式下,它只认当前目录或其父级中第一个含go.mod的目录为模块根。常见于:把hello.go直接放在C:或Desktop下运行。
解决方法只有一步:确保你在$GOPATHsrc子目录(或任意有go.mod的目录)里操作:
cd $GOPATHsrcmyproject go mod init myproject go run hello.go
-
go mod init后会生成go.mod,内容含模块路径(如module myproject),该路径不必是真实域名,但要唯一 - 如果项目已存在,且
go.mod在子目录里,cd进去再运行命令,别用go run ./subdir/main.go跨级调用 - Windows路径分隔符用
,但go.mod里模块路径必须用/(Go规范),例如module github.com/you/project
VS Code调试器启动失败,dlv 找不到或版本不匹配
Go扩展默认用dlv(Delve)调试,但Chocolatey装的Go不附带dlv,且go install github.com/go-delve/delve/cmd/dlv@latest在PowerShell里常因代理或权限失败。
最稳的自动化方案是用Chocolatey一并装好:
choco install delve
然后在VS Code的.vscode/launch.json里显式指定路径:
{
"version": "0.2.0",
"configurations": [{
"name": "Launch Package",
"type": "go",
"request": "launch",
"mode": "auto",
"program": "${workspaceFolder}",
"env": {},
"args": [],
"dlvLoadConfig": { "followPointers": true },
"dlvPath": "C:\ProgramData\chocolatey\bin\dlv.exe"
}]
}
-
dlvPath必须写绝对路径,PowerShell的$env:PATH对VS Code调试器不可见 - 如果用的是Go 1.21+,确保
dlv版本 ≥ 1.21,旧版dlv可能无法解析新语法(如泛型) - 首次调试前,在项目根目录运行一次
go mod tidy,避免dlv因依赖缺失卡住
go env输出,光靠复制粘贴脚本,迟早掉坑里。golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!











