栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在编译时删除未使用的代码?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在编译时删除未使用的代码?

编译器已经做到了。所有代码都以包文件(

.a
)结尾,但是在可执行二进制文件中,Go工具并不包括导入包中的所有内容,仅包括所需的内容(或更确切地说,它排除了可能无法访问的内容)。

这里要注意的一件事:如果一个导入的包(您只想从中包含您所引用的内容)导入了其他包,那么这当然必须递归地完成。

例如,如果您导入此程序包:

package subplayfunc A() {}

并从中调用任何内容:

package mainimport _ "play/subplay"func main() {}

结果二进制文件(Go 1.8,linux,amd64)将为960,134字节(大约1 MB)。

如果更改

subplay
为导入
net/http

package subplayimport _ "net/http"func A() {}

但是仍然不要从中调用任何内容

net/http
,结果将是: 5,370,935字节 (大约5
MB)!(请注意,
net/http
还要导入其他39个软件包!)

现在,如果您开始使用以下内容

net/http

package subplayimport "net/http"func A() {    http.ListenAndServe("", nil)}

但是在

main
程序包中您仍然不调用
subplay.A()
,可执行二进制文件的大小 不会改变:仍然为5,370,935字节

当您将

main
包更改为call时
subplay.A()

package mainimport "play/subplay"func main() {    subplay.A()}

结果二进制数 增长:5,877,919字节

如果更改

http.ListenAndServe()
http.ListenAndServeTLS()

func A() {    http.ListenAndServeTLS("", "", "", nil)}

结果二进制为: 6,041,535字节

如您所见,编译到可执行二进制文件中的内容 确实取决于您 从导入包中 调用/使用 的内容。

同样不要忘记Go是一种静态链接的语言,结果可执行二进制文件必须包含它需要的所有内容。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/471080.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号