Golang中go mod是否会为包生成编译后的二进制文件?

Golang中go mod是否会为包生成编译后的二进制文件? 如果我们使用 go get 命令,源代码会被下载到 $GOPATH/src 目录,编译后的二进制文件则生成在 $GOPATH/pkg 目录。

但是,如果我们创建一个 mod 文件,并且从该源代码下载包,源代码会存放在 $GOPATH/pkg/mod 目录中,却找不到二进制文件。

二进制文件是否生成?

谢谢

1 回复

更多关于Golang中go mod是否会为包生成编译后的二进制文件?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在 Go modules 模式下,go get 命令不会为依赖包生成编译后的二进制文件。Go modules 的设计目标是管理依赖关系,而不是构建可执行文件。依赖包的源代码会被下载到 $GOPATH/pkg/mod 目录(或由 GOMODCACHE 环境变量指定的位置),但不会为这些包生成二进制文件。

Go 工具链仅在构建主程序或直接编译包时生成二进制文件。对于依赖包,Go 使用缓存机制存储编译结果(例如在 $GOCACHE 目录中),但这些不是传统的 .a 文件,而是内部格式的缓存,用于加速后续构建。如果你需要为依赖包生成二进制文件,可以使用 go buildgo install 命令针对具体包进行操作。

示例代码说明: 假设你有一个模块 example.com/mymodule,并依赖 github.com/example/dependency。运行以下命令:

# 下载依赖到模块缓存
go get github.com/example/dependency

# 尝试为依赖包生成二进制文件(这通常不会生成独立的二进制文件,除非是主包)
go build github.com/example/dependency

如果 github.com/example/dependency 是一个库包(非 main 包),go build 不会输出二进制文件。如果是 main 包,则会在当前目录生成可执行文件。要明确生成库包的归档文件,可以使用 go install,但注意这仅在旧版 GOPATH 模式下常见,modules 模式下不推荐。

总之,Go modules 不自动为依赖包生成二进制文件;它管理源代码和版本,编译缓存由 Go 工具内部处理。

回到顶部