最稳妥的安装方式是手动下载官方二进制包并解压至/usr/local/go:下载linux-amd64.tar.gz(arm64选linux-arm64.tar.gz),执行sudo rm -rf /usr/local/go && sudo tar -c /usr/local -xzf go*.tar.gz,再配置export goroot=/usr/local/go和export path=$goroot/bin:$path($goroot/bin必须前置),最后设置goproxy=https://goproxy.cn,direct并验证go version、go mod init、go run三者均成功。

别用 apt install golang 或 yum install golang —— 它们装的几乎肯定是旧版(Ubuntu 24.04 自带 go1.21.6,CentOS 7 是 go1.11),不支持泛型、embed、io.ReadAll,go mod 默认关闭,go env -w 不可用,项目声明 go 1.22 直接报错退出。
怎么下载并解压官方二进制包(必须用这个路径)
手动下载官方 tar.gz 是唯一可靠方式。关键不是“下载”,而是解压到约定位置:
- 去 https://www.php.cn/link/c3367c02da318284045c5b13c76a79d2 下最新
linux-amd64.tar.gz(ARM64 机器选linux-arm64.tar.gz) - 执行:
wget https://www.php.cn/link/c3367c02da318284045c5b13c76a79d2go1.23.10.linux-amd64.tar.gz - 强制清理旧安装:
sudo rm -rf /usr/local/go - 解压到固定路径:
sudo tar -C /usr/local -xzf go1.23.10.linux-amd64.tar.gz
注意:-C /usr/local 必须是绝对路径,且目标必须是 /usr/local/go —— 这是 go 工具链自动推导 GOROOT 的唯一标准路径。解压到 $HOME/go 或其他位置,后续会因路径混乱导致 go build 找不到 runtime 包。
PATH 和 GOROOT 怎么设才不冲突
go version 成功 ≠ 实际调用的是新版。系统自带的 /usr/bin/go(来自 apt)常会优先被调用,造成“看似正常,实则用错版本”的陷阱。
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
- 编辑
~/.bashrc或~/.zshrc,写入以下四行(顺序不能错):export GOROOT=/usr/local/goexport PATH=$GOROOT/bin:$PATHexport GOPATH=$HOME/goexport PATH=$PATH:$GOPATH/bin -
$GOROOT/bin必须放在$PATH开头,否则which go仍可能返回/usr/bin/go - 改完立刻执行:
source ~/.zshrc(或对应 shell 文件),再运行which go验证输出是否为/usr/local/go/bin/go - 如果用
sudo su -切换 root 后go找不到,是因为 root 没加载你的用户配置;需单独为 root 配置,或改用/etc/profile.d/go.sh(systemd/crontab 等系统服务只读这里)
不配 GOPROXY 就等于没装成功
go version 成功只是第一步。只要涉及 go mod download、go get 或 go run 自动拉依赖,没代理就会卡死,错误只有 dial tcp: i/o timeout,完全不提示代理问题。
- 执行:
go env -w GOPROXY=https://goproxy.cn,direct
其中direct表示对私有仓库(如公司内网 Git)跳过代理,必须保留 - 验证是否生效:新建空目录,执行
go mod init example.com/testgo get github.com/sirupsen/logrus
几秒内完成即通 - 若仍超时,检查公司防火墙是否放行
goproxy.cn,或临时用go env -w GOPROXY=direct排查是否纯网络问题
验证三件事全通才算真可用
真正装好 Go,必须同时满足:
-
go version输出当前最新版(如go1.23.10) -
go mod init hello能生成go.mod文件 -
go run main.go(含fmt.Println("Hello"))能立即输出,不报cannot find module或卡在依赖拉取
缺一不可。最容易被忽略的是第三点 —— 很多人 go version 通过就以为完事,结果第一次 go run 就卡住,反复重装却没意识到是 GOPROXY 或 PATH 顺序问题。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!










