小编典典

如何检查Golang项目的大小?

go

有没有一种简单的方法来检查Golang项目的大小?它不是可执行文件,而是我要在自己的项目中导入的软件包。


阅读 279

收藏
2020-07-02

共1个答案

小编典典

您可以通过查看$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.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

$ du -k *

1028    empty
5812    http
5832    mux

这告诉我们什么?核心go pkg net/http大大增加了我们的可执行文件的大小。该muxPKG本身并不大,但对进口的依赖
net/httpPKG
-因此显著文件大小这一点。然而,mux和之间的增量http仅为20KB,而mux.a库列出的文件大小为284KB。因此,我们不能简单地添加库的pkg大小来确定其实际占用空间。

结论: go链接器将在构建过程中从各个库中剥离很多行李,但是为了真正了解导入某些程序包的额外 重量 ,必须将pkg的所有 子依赖项 视为好。

2020-07-02