正确做法是下载go安装包解压到用户目录(如$home/local/go),设goroot和path=$goroot/bin,显式配置gopath=$home/go、gocache=$home/.cache/go-build、gobin=$home/bin,并设置goproxy=https://goproxy.cn,direct。

直接解压到用户目录,别碰系统路径
共享主机上没管理员权限,就别想着 sudo apt install golang 或往 /usr/local/go 写东西——这些路径你写不进去,强行操作会报 Permission denied。正确做法是下载官方 go*.tar.gz(Linux/macOS)或 go*.zip(Windows),解压到你有完全控制权的地方,比如:$HOME/local/go、$HOME/go 或 /tmp/yourname/go(只要该目录可写)。解压后,GOROOT 就设成这个路径,例如 export GOROOT=$HOME/local/go。
环境变量只改用户级,避免 setx / export 写错位置
在共享主机上,你通常只能修改自己的 shell 配置文件(如 ~/.bashrc、~/.zshrc 或 ~/.profile),不能动 /etc/profile。常见错误是:用 setx(Windows)或 export(Linux/macOS)只在当前终端临时生效,关掉窗口就失效;或者误把 PATH 加错位置,比如写成 export PATH=$HOME/local/go:$PATH(漏了 /bin),导致 go 命令找不到。
- 必须加的是
$GOROOT/bin,不是$GOROOT -
GOPATH建议显式设为$HOME/go,避免 fallback 到可能被其他用户共用的默认路径 - Windows 用户若用 PowerShell,别用
setx后立刻测试——它只对新会话生效;改用$env:PATH += ";$HOME\go\bin"临时追加更可靠
go mod 是默认行为,但 GOPROXY 必须手动配
Go 1.16+ 默认启用模块模式,go build 或 go run 不再依赖 GOPATH/src,但模块下载仍要走网络。共享主机常屏蔽境外地址,直接访问 proxy.golang.org 会卡住甚至超时,表现为 go get 卡在 “Fetching” 或报 Get \"https://proxy.golang.org/...\": dial tcp: i/o timeout。
Go 配置库,使用 spf13/viper — 分层优先级(flag > env >file > KV > default),提供 BindPFlag/BindPFlags、SetEnvPrefix + SetEnvKeyReplace 等功能。
- 执行
go env -w GOPROXY=https://goproxy.cn,direct(国内推荐)或https://goproxy.io,direct - 如果公司内网有私有代理,加
go env -w GOPRIVATE=git.internal.company.com - 别跳过这步——没配代理时,
go mod download可能失败,且错误提示不明确
多用户共用 NFS / home 目录时,缓存和 bin 路径要隔离
有些共享主机把用户 $HOME 挂在 NFS 上,$GOCACHE 和 $GOPATH/pkg 若没单独指定,多个用户并发写入可能触发文件锁冲突或损坏缓存,表现是 go build 报 cannot lock ... cache 或反复下载同一模块。
- 强制设置
export GOCACHE=$HOME/.cache/go-build(确保.cache目录存在) -
GOBIN设为$HOME/bin,并确认该目录已在PATH中(很多系统默认包含) - 避免用
go env -w写配置——它生成的$HOME/go/env是纯文本,无权限校验,易被他人误改
真正麻烦的不是装不上 Go,而是不同用户共享缓存或 GOPATH 导致构建行为不一致;路径一设错,后续所有 go install 和 go run 都可能静默失败。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!










