概览
在 Linux 上,Go 的包管理通常分为两层:一是安装和管理 Go 工具链本身(系统包管理器或官方二进制),二是管理项目依赖(Go Modules)。自 Go 1.13 起,Go Modules 成为默认依赖管理方式,推荐在新项目中使用;旧项目从 GOPATH 向 Modules 迁移即可。
安装 Go 工具链
- 发行版包管理器安装(省心、集成好,但版本可能偏旧)
- Debian/Ubuntu:sudo apt update && sudo apt install golang-go
- Fedora:sudo dnf install golang
- CentOS/RHEL 7:sudo yum install golang
- Arch:sudo pacman -S go
- openSUSE:sudo zypper install go
- 安装后执行 go version 验证。
- 官方二进制安装(获取最新版本、便于多版本共存)
- 下载对应架构的包(如 goX.Y.Z.linux-amd64.tar.gz),解压至 /usr/local 或用户目录:
- sudo tar -C /usr/local -xzf goX.Y.Z.linux-amd64.tar.gz
- 配置 PATH(写入 ~/.bashrc、~/.profile 或 ~/.zshrc):
- export PATH=$PATH:/usr/local/go/bin
- 如需多版本共存,可使用 goenv 进行全局或项目级版本切换。
项目依赖管理 Go Modules
- 初始化与基本命令
- 初始化模块:go mod init
- 添加/更新依赖:go get @(如 github.com/gin-gonic/gin@v1.9.0)
- 整理依赖(新增缺失、移除未使用):go mod tidy
- 构建/运行:go build ./…、go run main.go
- 依赖缓存目录:$GOPATH/pkg/mod
- 常用增强
- 下载依赖到本地缓存:go mod download
- 依赖图:go mod graph
- 生成 vendor 目录:go mod vendor
- 校验依赖完整性:go mod verify
- 解释为何需要依赖:go mod why
- 版本选择与升级
- 升级到最新次要/修订版本:go get -u
- 仅升级补丁版本:go get -u=patch
- 指定版本(标签、分支、提交哈希均可):go get foo@v1.2.3、foo@master、foo@e3702bed2
- 模块文件指令
- module、require、replace、exclude 用于声明模块、依赖、替换与排除规则。
环境变量与网络优化
- 模块开关(Go 1.13+ 默认无需设置)
- GO111MODULE=off:禁用模块,按 GOPATH/vendor 查找
- GO111MODULE=on:启用模块,忽略 GOPATH/vendor
- GO111MODULE=auto:在 GOPATH/src 外且存在 go.mod 时启用
- 代理与私有仓库
- 设置模块代理(国内常用):export GOPROXY=https://goproxy.cn,direct
- 私有仓库免代理:go env -w GOPRIVATE=git.example.com,github.com/yourorg/private
- 其他常用
- 查看与设置模块相关变量:go env、go env -w KEY=VALUE
- 现代模块项目通常无需显式设置 GOPATH;可执行文件安装到 $GOPATH/bin(若设置)。
迁移与常见问题
- 从 GOPATH 迁移
- 在项目根目录执行:go mod init ,随后 go mod tidy;必要时使用 replace 指向本地路径或私有仓库,逐步完成迁移。
- 导入路径与包可见性
- 使用模块后,包导入基于模块名而非 GOPATH/src 的绝对路径;例如模块名为 demo,内部调用应使用 import “demo/pkg/util”。
- 多版本共存与切换
- 开发/测试不同 Go 版本建议使用 goenv;CI 或生产环境可采用独立目录解压不同版本并通过 PATH 切换。