我在一次谈话中看到,Go编译器将积极删除输出二进制文件中没有使用的代码。我找不到的谈话用它来添加一些对测试有用的代码。有没有人知道更多关于这是如何工作的信息?有关于先进测试技术的讨论吗?
发布于 2014-10-20 22:44:56
五件事能使事情进展得很快 切尼 死码消除 func Test() bool {返回false } func昂贵(){ if Test() { //某某昂贵}} 在本例中,虽然function总是返回false,但是如果不执行函数测试,昂贵的用户就无法知道这一点。 当测试被内联时,我们会得到这样的信息 {如果假{ //某些昂贵的是//现在无法到达}} 编译器现在知道昂贵的代码是无法到达的。 这不仅节省了调用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
}
}只为测试而包含代码可能是有用的。
发布于 2014-10-20 18:39:41
Dave在他的基准博客文章中谈到了这一点:
http://dave.cheney.net/2013/06/30/how-to-write-benchmarks-in-go (关于编译器优化的注记)
https://stackoverflow.com/questions/26469244
复制相似问题