介绍
go install:编译 Go 代码,并将可执行程序安装到系统全局目录,实现任意终端全局调用。
和 go build 最简区别
- go build:编译程序,生成在当前文件夹,只能在当前目录运行
- go install:编译程序,生成在全局 bin 目录,电脑任意位置都能运行
类比:
- build = 程序放在当前文件夹(局部使用)
- install = 程序放入系统公共目录(全局使用)
规则
go install只对 package main 生效,普通代码包无法生成可执行文件- 执行后本地文件夹不会生成任何程序文件
- Go1.16+ 安装远程工具必须带版本号/@latest,否则直接报错
全局安装目录
1. 安装路径优先级
优先读取 GOBIN 环境变量,未配置则使用默认 GOPATH 目录。
2. 默认全局 bin 路径
- Mac / Linux:
~/go/bin - Windows:
C:\Users\你的用户名\go\bin
3. 查看当前安装路径命令
go env GOBIN
go env GOPATH
4. 常见问题:安装成功但提示“命令未找到”
原因:go/bin 未加入系统 PATH 环境变量。
解决:将上述 bin 目录添加到系统环境变量 PATH,重启终端即可全局使用命令。
修改默认目录
windows系统
创建目录:
D:\devtools\go-bin
设置环境:
go env -w GOBIN=D:\devtools\go-bin
例子1:本地项目全局安装
1. 前置条件
项目必须包含 main 包(入口文件第一行:package main)
标准项目结构:
my-demo/
├── go.mod
└── main.go
2. 执行安装命令
进入项目根目录,直接执行:
go install
3. 执行结果
- 本地目录无任何文件生成
- 程序自动编译并保存到
go/bin - 新开终端,直接输入程序名即可运行
例子2:安装第三方Go工具(常用)
日常开发的代码校验、格式化、调试工具,全部通过 go install 全局安装。
1. 标准语法
go install 工具地址@版本
2. 合法写法(推荐)
# 安装最新版本
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
# 安装指定固定版本
go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.59.1
# 根据代码commit哈希安装
go install github.com/golangci/golangci-lint/cmd/golangci-lint@a23bcde
3. 错误写法(Go1.16+ 必报错)
# 禁止省略版本后缀
go install github.com/golangci/golangci-lint/cmd/golangci-lint
4. 关键说明
cmd/工具名:开源Go工具标准入口目录- 全局工具安装不会修改项目 go.mod,不污染项目依赖
- 工具源码缓存到 GOPATH 缓存目录,不会下载到本地项目
进阶编译参数(优化程序)
go install 完全兼容 go build 参数,常用优化命令:
# 压缩程序体积(去除调试信息,生产环境推荐)
go install -ldflags="-s -w" .
# 交叉编译:在Mac/Linux编译Linux可执行文件
GOOS=linux GOARCH=amd64 go install .
# 查看详细编译日志,用于排错
go install -v .
go build 与 go install 对比总结
| 命令 | 产物位置 | 使用范围 | 适用场景 |
|---|---|---|---|
| go build | 当前项目目录 | 仅当前目录可用 | 本地调试、临时运行 |
| go install | 全局 go/bin 目录 | 系统全局可用 | 安装工具、全局命令部署 |
常见报错与解决方案
1. 报错:missing version suffix
原因:远程安装命令缺少 @latest 或版本号
解决:命令末尾加上 @latest
2. 安装成功,终端找不到命令
原因:go/bin 未加入系统 PATH
解决:配置环境变量,重启终端
3. 工具更新后还是旧版本
原因:本地模块缓存未更新
解决:清理缓存重新安装
go clean -modcache
4. 执行 go install 无任何输出、无效果
原因:当前代码不是 package main
解决:仅对 main 包执行 install 命令
工具卸载方法
Go 无 go uninstall 命令,卸载直接删除全局二进制文件:
# Mac / Linux
rm ~/go/bin/工具名
# Windows
直接进入 C:\Users\用户名\go\bin 删除对应 exe 文件