在 GO 标准库中,我的 Go 安装下有源文件:
C:\Go\src\pkg
源文件夹下的包对应这里的 .a 文件:
C:\Go\pkg\windows_amd64
.a 文件是什么?它们用于什么以及它们是如何生成的。我注意到,当我这样做时它们会自动生成go get libraryhostedingithub
。
在 GO 标准库中,我的 Go 安装下有源文件:
C:\Go\src\pkg
源文件夹下的包对应这里的 .a 文件:
C:\Go\pkg\windows_amd64
.a 文件是什么?它们用于什么以及它们是如何生成的。我注意到,当我这样做时它们会自动生成go get libraryhostedingithub
。
它们是编译包。您在编写时引用的正是这些文件import foo/bar
。它指的是$GOROOT/pkg/$GOOS_$GOARCH/foo/bar.a
而不是$GOROOT/src/foo/bar/*.go
。
这些文件包含已编译的软件包二进制代码,以及调试符号和源信息。
Go .a
package object archive files are created by the go tool pack
command: Command pack.
根据文档:
如果 DIR 是 Go 路径中列出的目录,则可以将源位于 DIR/src/foo/bar 的包导入为“foo/bar”,并将其编译后的形式安装到“DIR/pkg/GOOS_GOARCH/foo/bar. a”(或者,对于 gccgo,“DIR/pkg/gccgo/foo/libbar.a”)。
所以它似乎只是编译/安装的包。
正如@peterSO 所说,“Go .a
package 对象存档文件是由go tool pack
命令创建的:Command pack。”。
但是,更清楚地说,您可以复制这些文件并将扩展名重命名为.tar.gz
并在程序中将它们作为常规压缩 tar 映像打开,或者您可以使用相同7zip
的tar -xvf
命令。Linux
go tool pack
在里面你会看到包含架构编译代码和调试符号的编译目标文件“.o”,以及包含包元数据的包定义文件(__.PKGDEF)。