如何检查Golang项目的大小?

问题描述 投票:1回答:1

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

go project
1个回答
5
投票

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

编辑:

库(包)大小是一回事,但链接阶段后可执行文件中占用的空间可能会有很大差异。这是因为包具有自己的依赖关系,并且带来了额外的行李,但是该行李可能由您导入的其他包共享。

一个例子证明了这一点:

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

这告诉我们什么?核心去pkg net/http为我们的可执行文件增加了很大的大小。 mux pkg本身并不大,但它对net/http pkg具有导入依赖性 - 因此它的重要文件大小也是如此。然而,muxhttp之间的差异只是20KB,而mux.a库中列出的文件大小是284KB。所以我们不能简单地添加库pkg大小来确定它们的真实足迹。

结论:go链接器将在构建过程中从单个库中删除大量的包袱,但为了真正了解导入某些包的额外重量,必须将所有pkg的子依赖关系视为好。

© www.soinside.com 2019 - 2024. All rights reserved.