必须手动下载官方go预编译包而非用apt/yum安装,因后者版本过旧且缺失go mod完整支持;需确认架构(x86_64/amd64或aarch64/arm64)、系统非alpine,配置goroot、gopath、path及goproxy、gosumdb,并监听0.0.0.0:8080验证连通性。

确认云服务器架构和系统发行版再下载 Go 二进制包
直接用 apt install golang 或 yum install golang 安装,大概率会拿到过时版本(如 Ubuntu 22.04 默认是 go1.18),且缺失 go mod 完整支持,后续拉依赖或构建失败。必须手动下载官方预编译包。
先执行:uname -m —— 输出 x86_64 对应 linux-amd64 包,输出 aarch64 或 arm64 则必须选 linux-arm64 包;再运行:cat /etc/os-release —— 确认不是 Alpine(Alpine 缺 glibc,go 二进制无法运行)。
常见错误现象:bash: /usr/local/go/bin/go: cannot execute binary file: Exec format error,基本就是架构 mismatch。
下载地址用国内镜像更稳:https://golang.google.cn/dl/ 或清华源:https://mirrors.tuna.tsinghua.edu.cn/golang/,别用国际官网链接,容易卡住。
解压后正确配置 GOROOT、GOPATH 和 PATH
GOROOT 是 Go 安装根目录,GOPATH 是工作区(影响 go install 输出位置),PATH 必须同时包含 $GOROOT/bin 和 $GOPATH/bin,否则 go 命令或 dlv、gopls 等工具都找不到。
推荐操作(以 go1.22.4.linux-amd64.tar.gz 为例):
sudo tar -C /usr/local -xzf go1.22.4.linux-amd64.tar.gz- 在
~/.bashrc或~/.zshrc中追加三行:
export GOROOT=/usr/local/go export GOPATH=$HOME/go export PATH=$GOROOT/bin:$GOPATH/bin:$PATH
然后执行:source ~/.bashrc(或 source ~/.zshrc)。
验证:go version 应输出版本;go env GOPATH 应返回 /home/xxx/go(非空且路径合理);which go 应指向 /usr/local/go/bin/go。
注意:新项目不要放 $GOPATH/src 下,直接在任意目录执行 go mod init example.com/myapp 即可。
必须设置 GOPROXY 并按场景决定 GOSUMDB
不配代理,go mod download 会卡在 proxy.golang.org 或报 checksum 错误:verifying github.com/xxx@v1.2.3: checksum mismatch。这不是代码问题,是网络不可达导致校验失败。
生产环境建议:
go env -w GOPROXY=https://mirrors.tuna.tsinghua.edu.cn/goproxy/,direct-
go env -w GOSUMDB=sum.golang.org(保留校验)
测试/开发环境可临时关闭校验:
go env -w GOSUMDB=off
验证代理是否生效:go env GOPROXY 应输出对应地址;go list -m -json all | head -n 5 能快速列出依赖即说明通了。
用绑定 0.0.0.0 的 HTTP 服务验证端口与安全组连通性
写个最简 main.go 启动服务,只监听 0.0.0.0:8080,别用 localhost:8080 或 127.0.0.1:8080 —— 这样外部根本访问不到,容易误判环境没搭好。
示例代码:
package main
import "net/http"
func main() {
http.ListenAndServe(":8080", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("ok"))
}))
}
启动后,在云控制台安全组里确认已放行 TCP 8080 入方向;再从本地浏览器访问 http://你的公网IP:8080,能返回 ok 才算真正跑通。
容易被忽略的点:防火墙(ufw 或 firewalld)可能也拦着,Ubuntu 默认关,CentOS 默认开,记得查 sudo ufw status 或 sudo firewall-cmd --list-ports。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!











