为了账号安全,请及时绑定邮箱和手机立即绑定

Go编译器技巧

Go编译器技巧

Go
哈士奇WWW 2021-08-23 16:58:41
我在一次演讲中读到 Go 编译器将积极删除输出二进制文件中未使用的代码。我找不到的谈话使用它来添加一些对测试有用的代码。有没有人有更多关于它是如何工作的信息?是否有关于高级测试技术的讨论?
查看完整描述

2 回答

?
呼唤远方

TA贡献1856条经验 获得超11个赞

让 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

    }

}

包含仅用于测试的代码可能很有用。


查看完整回答
反对 回复 2021-08-23
  • 2 回答
  • 0 关注
  • 166 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信