powershell执行策略必须先调低,否则go env -w会静默失败:默认restricted或allsigned策略阻止配置写入,需执行set-executionpolicy remotesigned -scope currentuser放行,且chocolatey装go后须手动创建gopath下的src、bin、pkg目录并添加bin至path,go mod init须在无go.mod的空目录执行,vs code调试需将launch.json中program设为"${workspacefolder}"。

PowerShell执行策略必须先调低,否则go env -w会静默失败
Windows上用PowerShell装Go,最常卡在go env -w GOPATH=...没反应——不是命令错了,是PowerShell默认执行策略阻止了配置写入。它不会报错,但go env里还是空的。
执行前必须手动放行:
-
Get-ExecutionPolicy确认当前策略(通常是Restricted或AllSigned) -
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser只对当前用户生效,足够安全 - 别用
-Scope LocalMachine,除非你真要管全系统,且有管理员权限
这步跳过,后续所有go env -w、choco install后的环境变量初始化都会失效,但错误不显式抛出,排查成本极高。
Chocolatey装Go后必须手动初始化GOPATH目录结构
Chocolatey能装go二进制,但不会建GOPATH下的src、bin、pkg三级目录。而go build、go install默认依赖这个结构,尤其go install会把可执行文件丢进$GOPATH/bin,如果目录不存在,它就默默失败,不提示。
建议一次性补全:
mkdir $env:GOPATH\src $env:GOPATH\bin $env:GOPATH\pkg- 验证:
go env GOPATH输出路径是否和$env:GOPATH一致,不一致说明go env -w没生效 - 把
$env:GOPATH\bin加进$env:PATH:用$env:PATH = "$env:GOPATH\bin;$env:PATH",然后新开PowerShell窗口测试go version能否直接调用
漏掉bin目录,go install生成的工具(比如gopls)就找不到,VS Code插件会反复报“language server not found”。
go mod init必须在空目录下执行,否则报cannot find main module
新建项目时,go mod init github.com/yourname/project看似简单,但只要当前目录里已有go.mod(哪怕是上层目录残留的),就会触发go: cannot find main module。这不是路径问题,是Go模块查找逻辑决定的:它从当前目录往上找第一个go.mod,如果没找到,就拒绝初始化。
实操要点:
- 用
Get-Location确认当前路径,确保是全新空目录 - 删掉所有父级目录里的
go.mod,哪怕只是临时测试留下的 - 初始化后立刻跑
go list -m,输出应为你的模块名;若为空或报错,说明模块没真正激活
很多初学者在桌面或文档目录直接开项目,结果被隐藏的go.mod坑住,以为是Go版本问题,其实是模块上下文污染。
VS Code调试器启动失败,大概率是launch.json里没配program字段
VS Code用dlv调试Go,默认launch.json模板里program字段是"${file}",这只能调试单文件。一旦项目有go.mod且入口在main.go,就必须改成"${workspaceFolder}",否则调试器启动即退出,控制台只显示Process exiting with code 0,毫无日志。
正确配置片段:
{
"version": "0.2.0",
"configurations": [
{
"name": "Launch",
"type": "go",
"request": "launch",
"mode": "auto",
"program": "${workspaceFolder}",
"env": {},
"args": []
}
]
}
另外注意:dlv必须在$GOPATH/bin里,且VS Code Go插件设置里"go.delvePath"要指向它;如果用了自定义安装路径,插件会找不到调试器,但错误提示极不明确。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!











