Go编译器会忽略未使用的函数吗 [英] Will go compilers ignore unused functions

查看:16
本文介绍了Go编译器会忽略未使用的函数吗的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果我的项目中根本没有使用外部包中的函数,编译器是否会从生成的机器码中删除该函数?

这个问题一般可以针对任何语言编译器。但是,我认为这种行为可能会因语言而异。所以,我很想知道围棋编译器都做些什么。

如果您能对此有所了解,我将不胜感激。

推荐答案

语言规范在任何地方都没有提到这一点,从正确的角度来看,这是无关紧要的。

但要知道,当前版本确实删除了编译器可以证明未使用的某些构造,并且不会更改应用的运行时行为。

引用自The Go Blog: Smaller Go 1.7 binaries

第二个更改是方法修剪。直到1.6,所有使用的类型上的所有方法都被保留,即使其中一些方法从未被调用。这是因为它们可能通过接口调用,或者使用反射包动态调用。现在,编译器将丢弃任何与接口不匹配的未导出方法。同样,如果相应的reflection features没有在程序中的任何地方使用,链接器可以丢弃其他导出的方法,这些方法只能通过反射访问。这一更改会将二进制文件缩减5-20%。

方法比函数"难",因为方法可以通过反射列出和调用(与函数不同),但Go工具也会尽其所能删除未使用的方法。

您可以在以下答案中查看已删除/未链接代码的示例和证明:

How to remove unused code at compile time?

另请参阅其他相关问题:

Splitting client/server code

Call all functions with special prefix or suffix in Golang

这篇关于Go编译器会忽略未使用的函数吗的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆