将 Go 的默认工作 Go 目录从 $HOME/go 改为 $HOME/.go ,这个行为由环境变量 GOPATH 控制
核心原理:GOPATH 与现代 Go 的关系
自 Go 1.11 引入 Go Modules 后,项目源码不再强制依赖 GOPATH/src,但以下内容仍受 GOPATH 影响:
| 路径 | 用途 | 是否受 GOPATH 影响 |
|---|
$GOPATH/bin | go install 安装的可执行文件 | ✅ 是 |
$GOPATH/pkg/mod | Module 缓存(Go 1.16+ 由 GOMODCACHE 控制) | ⚠️ 部分 |
$GOPATH/src | 传统 GOPATH 模式源码 | ❌ Modules 模式下基本不用 |
因此,修改 GOPATH 主要影响二进制安装路径和部分缓存位置,不影响已启用 modules 的项目构建。
迁移步骤(Fedora 环境)
1. 设置环境变量
在 ~/.bashrc 或 ~/.zshrc 中添加:
1
2
3
4
5
| # Go workspace 配置
export GOPATH="$HOME/.go"
export GOBIN="$GOPATH/bin" # 显式指定二进制安装目录
export GOMODCACHE="$GOPATH/pkg/mod" # 可选:统一 module 缓存位置
export PATH="$GOBIN:$PATH" # 确保安装的工具可直接执行
|
💡 提示:Fedora 默认使用 Bash,建议修改 ~/.bashrc;若使用 Zsh 则改 ~/.zshrc。
使配置生效:
1
| source ~/.bashrc # 或 source ~/.zshrc
|
2. 迁移现有数据
1
2
3
4
5
6
7
8
9
10
| # 创建新目录结构
mkdir -p ~/.go/{bin,pkg,src}
# 迁移已有内容(保留原目录作为备份)
mv ~/go/bin/* ~/.go/bin/ 2>/dev/null || true
mv ~/go/pkg/* ~/.go/pkg/ 2>/dev/null || true
mv ~/go/src/* ~/.go/src/ 2>/dev/null || true
# 验证后可删除原目录
# rm -rf ~/go
|
3. 验证配置
1
2
3
4
5
| go env GOPATH GOBIN GOMODCACHE
# 应输出:
# /home/yourname/.go
# /home/yourname/.go/bin
# /home/yourname/.go/pkg/mod
|
测试安装一个工具验证路径:
1
2
3
| go install golang.org/dl/go1.21@latest
which go1.21
# 应返回:/home/yourname/.go/bin/go1.21
|