【发布时间】:2017-08-07 03:30:30
【问题描述】:
我们已经构建了一个被我们很多人使用的 Go 包。
它是使用标准import ("package-name") 方法导入的。
但在编译时,我们所有的实用程序,包括非常小的实用程序,最终都会变成非常大的二进制文件。
我们提取了实用程序中的所有字符串,发现整个包都被编译到每个实用程序中。包括那些实用程序未使用的功能。
编辑 1:
感谢回答这个问题的人。
这是我们所看到的:
main.go
package main
import "play/subplay"
func main() {
subplay.A()
}
play/subplay.go
package subplay
func A() {
fmt.Printf("this is function A()")
}
func B() {
fmt.Printf("secret string")
}
函数 B() 永远不会被调用。然而,在构建二进制文件后,我们在 main.exe 中找到了字符串“秘密字符串”。
我们如何在编译时从 Go 程序中删除未使用的代码?
【问题讨论】:
-
你使用的是什么版本的 Go?因为如果没有调用
subplay.B(),"secret string"确实不会出现在我的可执行文件中(Go 1.8,同时针对 linux 和 windows)!
标签: go compilation compiler-optimization