您可以通过查看
$GOPATH/pkg目录来查看库二进制文件的大小(如果
$GOPATH未导出,则
go默认为
$HOME/go)。
因此要检查一些
gorillahttp pkgs 的大小。首先安装它们:
$ go get -u github.com/gorilla/mux$ go get -u github.com/gorilla/securecookie$ go get -u github.com/gorilla/sessions
我的64位MacOS(
darwin_amd64)的KB二进制大小:
$ cd $GOPATH/pkg/darwin_amd64/github.com/gorilla/$ du -k *284 mux.a128 securecookie.a128 sessions.a
编辑:
库(包)的大小是一回事,但是在链接阶段之后,可执行文件中占用的空间可能有很大的不同。这是因为程序包具有自己的依赖性,并且随之而来的是额外的 包
but,但是您导入的其他包可能会共享这些包bag。
一个例子很好地说明了这一点:
empty.go:
package mainfunc main() {}http.go:
package mainimport "net/http"var _ = http.Servefunc main() {}mux.go:
package mainimport "github.com/gorilla/mux"var _ = mux.NewRouterfunc main() {}所有这三个程序在功能上都是相同的-执行零用户代码-但它们的依赖性不同。结果二进制大小
KB:
$ du -k *1028 empty5812 http5832 mux
这告诉我们什么?核心go pkg
net/http大大增加了我们的可执行文件的大小。该
muxPKG本身并不大,但对进口的依赖
net/httpPKG
-因此显著文件大小这一点。然而,
mux和之间的增量
http仅为
20KB,而mux.a库列出的文件大小为
284KB。因此,我们不能简单地添加库的pkg大小来确定其实际占用空间。
结论: go链接器将在构建过程中从各个库中剥离很多行李,但是为了真正了解导入某些程序包的额外 重量 ,必须将pkg的所有 子依赖项 视为好。



