当前位置: 首页 > 面试题库 >

如何检查Golang项目的大小?

彭涵衍
2023-03-14
问题内容

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


问题答案:

您可以通过查看$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的所有 子依赖项 视为好。



 类似资料:
  • 我最近一直在使用Hamcrest库编写一些测试,非常成功,但现在我需要做一些更复杂的事情,并开始看到很多困难。我需要输入并验证地图中项目的属性。我的生产代码如下所示: 我想写一些像下面这样的测试代码,但是它不编译。看起来Hamcrest的hasEntry是类型参数化的,而hasItem和hasProperty只需要Object。 我的IDE(Eclipse)给出了这个错误消息:参数化方法

  • 本周我收到了来自Google的安全警报,告诉我升级我的android版本的cordova应用程序。来自谷歌的电子邮件如下- 这是一个通知,表明您的应用程序ID是基于包含安全漏洞的Apache Cordova版本构建的。这包括一个高严重性跨应用程序脚本(XAS)漏洞。在某些情况下,易受攻击的应用程序可能被远程攻击以窃取敏感信息,例如用户登录凭据。 您应该尽快升级到Apache Cordova 3.5

  • 问题内容: 如何检查是否设置了项目?目前我正在使用 问题答案: 如果该项不存在,则WebStorage规范中的方法显式返回: …如果给定键在与对象关联的列表中不存在,则此方法必须返回null。… 所以你可以:

  • 我想使用flexbox,它有一些相同宽度的项目。我注意到flexbox将空间均匀分布,而不是空间本身。 例如: 第一项比第二项大得多。如果我有3个项目、4个项目或n个项目,我希望它们都显示在同一行,每个项目的空间相等。 有什么想法吗? http://codepen.io/anon/pen/gbJBqM

  • 问题内容: 这个问题基于MongoDB,如何通过选择多个条件来检索所选项目。就像Mysql中的IN条件一样 选择*从场所列表WHERE场所ID输入(场所1,场所2) 我已经附加了我使用过的json数据结构。 [参考:MONGODB的JSON STRUCTUE] 。 例如,它具有一个场所列表,然后在场所列表内,它具有多个属性场所ID,用户代理名称的总和以及总计数作为值。用户代理表示用户Os,浏览器和

  • 问题内容: 昨天,当我运行WebLogic Application Server 11g安装程序时,遇到了OutOfMemory错误,因此我用Google搜索了答案: 一切正常:) 但是,当我三思而后行时,我可能会犯一个错误:我怎么知道这些的当前设置?我当然需要在覆盖它们之前检查它们的值,对吗? 提前谢谢了。 问题答案: 您可以使用该实用程序检查正在运行的JVM的任何JVM标志的值。 因此要检查J