应直接下载官方二进制包安装go:从go.dev/dl/下载对应架构tar.gz,解压至/usr/local;设goroot=/usr/local/go、gopath=$home/go,将$goroot/bin和$gopath/bin加入path;内网环境需执行go env -w goproxy=direct。

直接装官方二进制包,别用系统包管理器(如 apt install golang),版本旧、路径混乱、升级麻烦。
下载并解压 Go 二进制包到 /usr/local
从 https://www.php.cn/link/81836b7cd16991abb7febfd7832927fd 下载对应架构的 go1.x.x.linux-amd64.tar.gz(ARM 服务器选 arm64 版本)。用 wget 下载后,用 tar -C /usr/local -xzf go*.tar.gz 解压——这会把 go 目录放进 /usr/local,是 Go 官方推荐位置。
注意:/usr/local/go 必须存在且不可被覆盖为软链接;某些一键脚本会把它链到 /opt/go,会导致 go env GOROOT 异常。
- 验证:运行
/usr/local/go/bin/go version看是否输出正确版本 - 不要用
sudo apt install golang-go—— Ubuntu 的包通常滞后 2~3 个次要版本,且把go装在/usr/lib/go,和GOPATH冲突频发 - 如果已误装系统包,先
sudo apt remove golang-go golang-src,再清空/usr/lib/go
配置 GOPATH 和 PATH(非 root 用户专属)
GOPATH 是 Go 1.11 之前必须设置的 workspace 路径,虽然 Go modules 模式下它不再决定依赖存放位置,但 go install 编译的可执行文件仍默认放到 $GOPATH/bin,而很多工具(如 gopls、delve)也依赖该路径。建议设为 $HOME/go。
立即学习“go语言免费学习笔记(深入)”;
在用户 shell 配置文件(~/.bashrc 或 ~/.zshrc)末尾添加:
export GOROOT=/usr/local/go export GOPATH=$HOME/go export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
然后执行 source ~/.bashrc(或 source ~/.zshrc)。检查:go env GOPATH 应输出 /home/username/go,which go 应为 /usr/local/go/bin/go。
- 别把
GOPATH设成/usr/local/go—— 这是GOROOT,混用会触发cannot find package "fmt"类错误 - 如果用
sudo su切换到 root 后go找不到,说明 root 的PATH没包含/usr/local/go/bin,需单独配置 root 的 shell 文件 -
go install生成的命令(如gopls)会落在$GOPATH/bin,务必确保该目录在PATH中,否则 VS Code 插件报 “command not found”
启用 Go modules 并关闭 GOPROXY(内网或受限网络场景)
Go 1.13+ 默认启用 modules,但 VPS 若在企业内网或无外网代理,go get 会卡在 proxy.golang.org。此时需显式关闭代理:
go env -w GOPROXY=direct go env -w GOSUMDB=off
前者让模块下载直连源站(如 GitHub),后者跳过校验(仅开发测试阶段可用;生产环境建议保留 GOSUMDB=sum.golang.org 并配好 DNS/代理)。
- 国内用户可临时设
GOPROXY=https://goproxy.cn,direct加速,但注意goproxy.cn不缓存私有仓库(如 GitLab 自建实例) - 若项目含私有模块(如
git.example.com/mylib),需配合go env -w GOPRIVATE=git.example.com,否则仍走公共 proxy -
go mod download失败时,先curl -v https://proxy.golang.org测试连通性,再决定是否切direct
真正容易出问题的是 GOPATH 和 GOROOT 的路径冲突,以及 GOPROXY 在离线环境下的静默失败——这两个点不手动确认,IDE 和 CLI 就会表现不一致,调试成本远高于初始化配置时间。










