Golang模块文件夹内安装库的方法
Golang模块文件夹内安装库的方法 大家好。我正在学习Go语言,有一个问题想请教:
我了解到自Go 1.11版本起,由于模块(modules)的引入,GOPATH的使用已被弃用。但每当我使用 go get 或 go install 命令下载库时,它们仍然会被放置到GOPATH/pkg目录中。
这是默认/正确的行为吗?我能强制它将库存储在我调用 go get/install 命令的模块内部吗?或者这是一个不好的做法?
GOPATH 作为托管项目的“工作区”机制已被弃用。
不过,它仍然用于安装二进制文件(bin)或准备链接外部库的构件(pkg)。
更多关于Golang模块文件夹内安装库的方法的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
嗨 @maykie,
@NobbZ 所写的内容都适用,此外:
maykie: 我能否强制它在调用
go get/install命令的模块内存储库?
我猜你指的是 vendoring(依赖项本地化)。是的,这可以做到。
go mod vendor 会将当前模块的所有依赖项下载到一个 “vendor” 文件夹中。
详情请参阅 Go 模块参考 - Go 编程语言。
在Go模块项目中,go get 和 go install 的行为确实是这样的:
go get会将依赖下载到模块的缓存目录(通常是$GOPATH/pkg/mod),同时更新go.mod和go.sum文件go install默认会将二进制安装到$GOPATH/bin,依赖同样会缓存到$GOPATH/pkg/mod
这是Go模块设计的正常行为,依赖库不会被直接下载到你的项目目录内部。模块系统通过 go.mod 文件来管理依赖版本,实际代码存储在全局缓存中。
如果你想让依赖出现在项目目录中,可以使用 vendor 目录:
# 初始化vendor目录
go mod vendor
# 构建时使用vendor中的依赖
go build -mod=vendor
或者直接查看依赖代码:
# 查看依赖在缓存中的位置
go list -m -f '{{.Path}} => {{.Replace}} {{.Dir}}' all
# 打开特定依赖的目录
cd $(go list -m -f '{{.Dir}}' github.com/example/library)
对于可执行工具的安装位置,可以修改:
# 安装到当前目录
go install -o ./my-tool github.com/example/tool
# 或者设置GOBIN环境变量
export GOBIN=$(pwd)/bin
go install github.com/example/tool
模块系统这样设计是为了避免在不同项目中重复下载相同的依赖,提高构建效率。依赖统一管理在全局缓存中,通过版本哈希确保一致性。

