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