猿问

Go编译器技巧

我在一次演讲中读到 Go 编译器将积极删除输出二进制文件中未使用的代码。我找不到的谈话使用它来添加一些对测试有用的代码。有没有人有更多关于它是如何工作的信息?是否有关于高级测试技术的讨论?


哈士奇WWW
浏览 167回答 2
2回答

呼唤远方

让 Go 更快的五件事戴夫·切尼死代码消除func Test() bool { return false }func Expensive() {  if Test() {      // something expensive  }}在这个例子中,虽然函数 Test 总是返回 false,但如果不执行它,Expensive 就无法知道这一点。当测试被内联时,我们得到这样的东西func Expensive() {  if false {      // something expensive is      // now unreachable  }}编译器现在知道无法访问昂贵的代码。这不仅节省了调用 Test 的成本,还节省了编译或运行任何现在无法访问的昂贵代码。例如,添加一些对测试有用的代码,func Complicated() {    if Test() {        // something for testing    }}切换Test自func Test() bool { return false }内联func Complicated() {    if false {        // something for testing        // unreachable    }}到func Test() bool { return true }内联func Complicated() {    if true {        // something for testing        // reachable    }}包含仅用于测试的代码可能很有用。
随时随地看视频慕课网APP

相关分类

Go
我要回答