您可以通过查看$GOPATH/pkg 目录来查看库二进制文件有多大(如果$GOPATH 未导出go 默认为$HOME/go)。
所以要检查一些gorilla http 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.a
128 securecookie.a
128 sessions.a
编辑:
库(包)大小是一回事,但在链接阶段之后在可执行文件中占用多少空间可能会有很大差异。这是因为包有它们自己的依赖项,并且随之而来的是额外的baggage,但这些包可能会被您导入的其他包共享。
一个例子最好地证明了这一点:
empty.go:
package main
func main() {}
http.go:
package main
import "net/http"
var _ = http.Serve
func main() {}
mux.go:
package main
import "github.com/gorilla/mux"
var _ = mux.NewRouter
func main() {}
所有 3 个程序在功能上都是相同的 - 执行零用户代码 - 但它们的依赖关系不同。 KB 中生成的二进制大小:
$ du -k *
1028 empty
5812 http
5832 mux
这告诉我们什么?核心 go pkg net/http 大大增加了我们的可执行文件的大小。 mux pkg 本身并不大,但它对 net/http pkg 具有导入依赖性 - 因此它的文件大小也很大。然而mux 和http 之间的增量仅为20KB,而mux.a 库的列出文件大小为284KB。所以我们不能简单地添加库 pkg 大小来确定它们的真实足迹。
结论:
go 链接器会在构建过程中从各个库中去除很多包袱,但是为了真正了解导入某些包有多少额外的权重,我们必须查看所有的pkg 的子依赖项也是如此。