go - /usr/lib/golang/src 和 /usr/lib/golang/pkg 是什么关系
问题描述
如果我为 Go 安装发行版包,我/usr/lib/golang/pkg
会在/usr/lib/golang/src
. 这两组有什么关系?
是pkg
从源代码生成的编译库src
吗?
假设一个使用标准包的 Go 程序,运行 Go 程序是否需要fmt
编译的库?pkg
是否需要编译 Go 程序?src
编译 Go 程序需要源代码吗?
解决方案
源代码
此目录包含组织为包的源文件。
包
该目录包含从 src 目录 Go 源代码包编译的 Go 包对象。如果一个包不包含带有main
包声明的文件,那么 Go 在目录中创建一个包存档 (.a) 文件pkg
。包对象在链接时用于在 bin 目录中创建完整的 Go 可执行二进制文件。
因此,一旦我们编译了一个包,我们就可以将该对象链接到许多可执行文件中。就像,
fmt
是编译好的库pkg
,所以不需要再次编译。我们可以链接该对象以运行所有 Go 程序。