最稳妥的安装方式是手动下载官方二进制包并配置path:下载对应平台的最新稳定版tar.gz,解压至/usr/local/go(macos/linux)或c:\go(windows),设置goroot指向该路径并将$goroot/bin加入path,再执行go env -w go111module=on。

Go 二进制必须手动装,别用 brew/apt/yum
系统包管理器装的 Go 版本普遍滞后(比如 Ubuntu 22.04 默认还是 go1.18),且 GOROOT 路径不统一(/usr/lib/go、/opt/homebrew/Cellar/go/...),导致 go env 输出混乱,跨平台构建时容易因工具链版本差异出错。
正确做法是:从 golang.google.cn/dl 下载对应平台的最新稳定版压缩包(如 go1.22.5.darwin-arm64.tar.gz),解压到固定路径(macOS 推荐 /usr/local/go,Windows 推荐 C:\Go),再把 /usr/local/go/bin 或 C:\Go\bin 加入 PATH。验证命令:go version 和 go env GOROOT 必须指向你解压的目录。
- Linux/macOS 执行
export PATH="/usr/local/go/bin:$PATH"并写入~/.zshrc - Windows CMD 用
setx PATH "%PATH%;C:\Go\bin"(需重启终端) - 装完立刻运行
go env -w GO111MODULE=on,强制启用模块模式
go mod init 是起点,不是可选项
不用 go mod init 就直接写代码,等于把项目绑死在本地 GOPATH,换台机器拉代码就大概率报 cannot find package。模块模式下依赖版本锁在 go.sum,和操作系统无关。
新建项目后第一件事就是:go mod init example.com/myapp(域名随意,只是命名空间)。之后所有 go get、go build 都会基于该模块解析依赖。
-
go.mod和go.sum必须提交到 Git,否则别人 clone 后无法复现构建 - 避免在项目里留
vendor/目录——它和模块模式冲突,且增大仓库体积 - 国内用户记得配代理:
go env -w GOPROXY=https://goproxy.cn,direct
GOOS/GOARCH 编译命令要带 CGO_ENABLED=0
默认开启 cgo 时,go build 会链接目标平台的 C 标准库(比如 musl 或 glibc),导致交叉编译出来的二进制在目标机器上跑不起来,报错类似 ./myapp: /lib64/libc.so.6: version `GLIBC_2.34' not found。
Go语言(Golang)1.26.0版本提供 Go 官方 Windows amd64 MSI 安装包下载入口,版本号 1.26.0,可用于旧项目维护、兼容性测试和指定版本开发环境配置。
绝大多数纯 Go 项目不需要调用 C 代码,关掉 cgo 是最稳妥的选择:在编译命令前显式设 CGO_ENABLED=0。
- macOS 编译 Linux 服务:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o server-linux main.go - Linux 编译 Windows 客户端:
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -o client.exe main.go - ARM64 设备部署(如树莓派):
CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -o pi-app main.go - 如果真要用 SQLite 或 OpenSSL,必须用 Docker 构建,或在目标平台装对应 C 工具链
VS Code + gopls 配置要写死 goroot
VS Code 的 Go 插件默认用 which go 查找 GOROOT,但不同平台的 PATH 可能指向不同版本的 Go,导致 gopls 报错 cannot load package 或自动补全失效。
解决方法是在项目根目录建 .vscode/settings.json,硬编码 go.goroot:
"go.goroot": "/usr/local/go", "go.formatTool": "gofumpt"
这样无论在哪台机器打开项目,gopls 都用你指定的 Go 工具链解析代码,路径分隔符、换行符、编码行为全部自动适配。
每次换新机器或升级 Go 版本,记得重新确认 go env GOROOT 输出,并同步更新这个配置值——这是最容易被跳过的一步,但直接影响编辑体验是否稳定。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!










