go get用于管理依赖库并更新go.mod,go install用于安装CLI工具且不修改go.mod;二者用途不同,Go 1.17+需在模块模式下使用,通过go mod init、go list -m和go env GO111MODULE确认环境。
在 Go 中安装依赖包主要通过 go get,而 go install 主要用于安装可执行命令(如 CLI 工具),两者用途不同,不能混用。Go 1.17+ 默认启用模块模式(Go Modules),推荐始终在模块环境下操作,避免 GOPATH 旧模式带来的混乱。
运行以下命令检查当前目录是否已初始化为模块:
go mod init
go list -m(查看当前模块名)
go env GO111MODULE(应返回 on)
不在模块中直接执行 go get 可能导致包被下载到 GOPATH/pkg/mod,但不会写入 go.mod,后续构建可能出错。
go get 会下载包、更新 go.mod 和 go,并自动满足 import 引用需求。常用方式包括:
.sum
go get github.com/gin-gonic/gin
go get github.com/spf13/cobra@v1.8.0
go get github.com/golang/freetype@master
go get -d github.com/go-sql-driver/mysql(-d 跳过构建和 require 写入)注意:Go 1.21+ 开始,go get 不再默认构建或安装命令,仅管理依赖;若需安装二进制,改用 go install。
go install 用于构建并安装带有 main 函数的包(即 CLI 工具),它不修改当前模块的 go.mod,而是从远程拉取源码、编译、放入 $GOBIN(默认为 $GOPATH/bin)。
go install golang.org/x/tools/cmd/goimports@latest
go install github.com/cosmtrek/air@v1.47.1
export PATH=$GOBIN:$PATH(Linux/macOS)或对应添加到系统环境变量(Windows)日常维护建议定期执行:
go mod download
go mod tidy(自动增删 go.mod 中的 require)go get -u(慎用,可能引入不兼容变更)go list -m -u all 或 go vulncheck ./...(Go 1.18+)不复杂但容易忽略。