Windows装Go用MSI包可免配环境变量,但必须手动设GOPROXY为https://goproxy.cn,direct,否则go mod download会超时;验证需检查go env中GOROOT、GOPATH及GOPROXY值,并重开终端确保生效。

Windows 上装 Go 不用折腾环境变量,.msi 安装包默认就配好了;但不配 GOPROXY,go mod download 会卡死或报 timeout 错误——这是新手最常卡住的地方。
怎么验证 Go 是否真装好了?别只看 go version
只运行 go version 成功,不代表能正常拉依赖或构建项目。必须补测两件事:
-
go env输出里要有GOROOT(通常是C:\Program Files\Go)和GOPATH(默认是%USERPROFILE%\go) - 执行
go env -w GOPROXY=https://goproxy.cn,direct后,再跑go env | findstr GOPROXY,输出必须含https://goproxy.cn - 如果
go env报错或字段为空,说明 CMD/PowerShell 是安装前打开的——关掉重开终端再试
为什么 go run main.go 能跑,但 go build 出错?
常见于项目没初始化模块。Go 1.16+ 默认启用模块模式,但空目录下直接 go build 会报 no required module provides package。
使用 uber-go/dig 在 Golang 中实现依赖注入——基于反射容器,提供 Provide/Invoke、dig.In/dig.Out 参数与结果对象,支持命名依赖等
- 进项目根目录后,先执行
go mod init example.com/hello(模块名可任意,不用真实域名) - 模块初始化后,
go.sum和go.mod文件自动生成,后续go build才能识别依赖 - 如果项目已含第三方 import(如
"github.com/gin-gonic/gin"),go run会自动下载,但go build不会——必须先go mod tidy补全依赖
一键编译成 Windows 可执行文件(无依赖、双击即用)
go build 默认生成带调试信息、依赖系统 DLL 的二进制,不适合分发。要真正“一键打包”,得加参数:
立即学习“go语言免费学习笔记(深入)”;
- 加
-ldflags "-s -w":去掉符号表和调试信息,体积缩小 30%~50% - 加
-o hello.exe:指定输出名,避免默认生成main.exe - 完整命令:
go build -ldflags "-s -w" -o hello.exe main.go - 如果目标机器没装 Go,确保没用
cgo(即没 import"C"),否则需额外设CGO_ENABLED=0
最容易被忽略的是:每次改了 go.mod 或新增 import,都得重新 go mod tidy,否则 go build 可能静默失败或运行时报 cannot find module ——这不是编译问题,是模块状态没同步。

















