go语言教程:go install命令作用

介绍

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 文件

原文出处:/show_1GW3zcgkiqkG.html