死代码
//go:noinline
func count() int {
return 3
}
func main() {
if x := count(); x > 5 {
println("a")
} else if x > 7 { // dead code
println("b")
}
}
反汇编查看
$ go build && go tool objdump -s "main\.main" test
死代码(Dead Code)是指永远不会被执行的代码,可使用专门的工具,或用代码覆盖率(code coverage)测试进行检查。通过覆盖率检查,我们知道哪些代码从来都不会执行,如果从来都不会执行的话,可能认为它是死代码。编译器也可主动清除死代码(dead code elimination, DCE)。
比如 x 返回 3,总是会被x > 5
捕捉,后边永远都不可能捕捉。通过代码覆盖率测试,可以找到这个代码永远不会被执行。死代码要检查是不是逻辑写错还是测试数据没有覆盖到。
类似于这样的一种失误是很多的,包括一些高手可能莫名其妙的因为一个条件判断或者其它原因造成写了一些永远不会被执行的代码。
通常情况下怎么测试这一点呢?我们写些代码来测试或者单元测试来测试。最好的方式用单元测试做到这一点:
//go:noinline
func demo(x int) string {
if x > 0 {
return "a"
} else if x > 5 { // dead code
return "b"
}
return