在 Fedora 上安装 Go:1.27 与国内模块代理
sudo dnf install golanggo versiongo version go1.27.1-X:nodwarf5 linux/amd64X:nodwarf5 是 Fedora 的构建标记(去掉 DWARF 调试信息以减小体积),功能与上游 1.27.1 一致。
go env GOPATH GOMODCACHE GOPROXYGOPATH:工作区,默认~/goGOMODCACHE:模块缓存,默认~/go/pkg/modGOPROXY:模块代理,默认https://proxy.golang.org,direct
国内直连 proxy.golang.org 经常超时,换掉它:
go env -w GOPROXY=https://goproxy.cn,directdirect 是兜底:代理没有的模块直接拉源码。验证:
go env GOPROXYhttps://goproxy.cn,directgo env -w 写的是 ~/.config/go/env,不是 shell 变量,重开终端也保留。
跑第一个程序
Section titled “跑第一个程序”mkdir -p ~/hello && cd ~/hellogo mod init example.com/hellocat > main.go <<'EOF'package main
import "fmt"
func main() { fmt.Println("hello from Go")}EOFgo run main.gohello from Go编译成二进制:
go build -o hello ../hello装命令行工具
Section titled “装命令行工具”go install golang.org/x/tools/cmd/goimports@latest装到 $GOPATH/bin(即 ~/go/bin)。这个目录默认不在 PATH 里:
echo 'export PATH=$PATH:$HOME/go/bin' >> ~/.bashrcsource ~/.bashrcgoimports -h 2>&1 | head -2仓库版与官方版怎么选
Section titled “仓库版与官方版怎么选”| 场景 | 选择 |
|---|---|
| 学习、跑现成项目、CI 构建 | dnf install golang 就够,升级跟 Fedora 走 |
| 要固定小版本(1.26.3 这种) | 上游 tarball 或 go install golang.org/dl/go1.26.3@latest |
| 多版本并存 | 上游 tarball 解到不同目录,用 PATH 切 |
装上游版本:
cd /usr/localsudo curl -LO https://go.dev/dl/go1.27.1.linux-amd64.tar.gzsudo tar xzf go1.27.1.linux-amd64.tar.gzexport PATH=/usr/local/go/bin:$PATHgo version| 现象 | 原因 |
|---|---|
go: cannot find main module | 没在模块目录里,先 go mod init |
| 拉模块一直卡住 | GOPROXY 还是官方地址,换 goproxy.cn |
go install 后命令找不到 | ~/go/bin 不在 PATH |
编译报 permission denied | 在 /usr 下构建,换到家目录 |
| 与仓库版冲突 | 两个 go 同时在 PATH,which -a go 查 |
- 国内加速源 — GOPROXY 与其他生态换源
- 容器与 rootless — 用容器固定 Go 版本
- 工具链与多版本共存 — 总体策略
- 安装 Rust — 同为编译型工具链
- 官方:Go