应直接使用官方二进制包安装 go,避免系统包管理器;国内需配置 goproxy,离线环境须禁用 gosumdb;交叉编译需显式设置 goos/goarch;远程部署应构建静态二进制并交由 systemd 管理。

直接用官方二进制包,别碰系统包管理器
Ubuntu 的 apt install golang、macOS 的 brew install go、Windows 的 Chocolatey 包,版本普遍滞后 2–3 个大版本,且安装路径不统一(比如 Ubuntu 把 go 放在 /usr/lib/go),导致 go env GOROOT 探测失败、go env -w 写入权限被拒、go mod 行为异常。你真正需要的只是一份匹配系统架构的官方压缩包。
实操建议:
- 去 https://www.php.cn/link/81836b7cd16991abb7febfd7832927fd 或国内镜像站(如清华源
https://mirrors.tuna.tsinghua.edu.cn/golang/)下载对应包,例如go1.22.5.linux-amd64.tar.gz、go1.22.5.darwin-arm64.pkg、go1.22.5.windows-amd64.msi - Linux/macOS 解压到
/usr/local/go;Windows 建议用 .msi 安装并接受默认路径C:\Program Files\Go(自动配环境变量,新手友好) - 验证:新开终端执行
go version和go env GOROOT,输出必须一致且指向你解压/安装的路径
国内网络必须配 GOPROXY,离线环境得关 GOSUMDB
没代理时 go mod download 卡在 golang.org/x/net 是常态;离线时即使有模块缓存,也会因校验失败报 verifying github.com/xxx@v1.2.3: checksum mismatch。
实操建议:
- 国内联网环境:运行
go env -w GOPROXY=https://goproxy.cn,direct(七牛云)或go env -w GOPROXY=https://mirrors.tuna.tsinghua.edu.cn/goproxy/,direct(清华源) - 离线环境:提前在联网机器上执行
go mod download,再打包整个$GOPATH/pkg/mod目录;目标机上运行go env -w GOPROXY=direct GOSUMDB=off - 私有仓库(如
git.example.com)必须加go env -w GOPRIVATE=git.example.com,否则代理会拦截请求
跨平台构建别靠“编译一次到处跑”,要显式设 GOOS/GOARCH
go build 默认生成当前系统可执行文件。想在 macOS 上打出 Linux 二进制?不设 GOOS 就永远得不到 linux/amd64 文件。
实操建议:
- 基础交叉编译命令:
GOOS=linux GOARCH=amd64 go build -o app-linux main.go - 常用组合:
GOOS=windows GOARCH=386(32 位 Windows)、GOOS=darwin GOARCH=arm64(Apple Silicon macOS) - 如果代码用了
cgo(比如调sqlite3或openssl),交叉编译会失败——此时必须用 Docker 或目标平台机器构建 - 构建前清缓存:
go clean -cache -modcache,避免旧平台残留干扰
远程服务器上别用 go run,构建后交 systemd 管理
go run main.go 在远程服务器上只是临时编译+执行,进程无父进程管理、日志不落盘、崩溃不自启、升级需手动 kill,完全违背运维规范。
实操建议:
- 构建静态二进制:
CGO_ENABLED=0 go build -a -ldflags '-s -w' -o /opt/myapp/bin/app main.go - 写 systemd unit 文件(如
/etc/systemd/system/myapp.service),指定User、WorkingDirectory、ExecStart和Restart=always - 日志统一走
systemd-cat:./app 2>&1 | systemd-cat -t myapp,方便journalctl -u myapp查看 - 调试用
dlv远程 attach,不是本地go run加断点
GOROOT 是全局系统级路径,必须所有 shell 子进程都能继承;GOPROXY 是用户级设置,写入 $HOME/go/env,换用户就失效。配置完一定要新开终端验证,别信“source 一下就万事大吉”。golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!











