2 回答

TA貢獻1856條經(jīng)驗 獲得超11個贊
讓 Go 更快的五件事
戴夫·切尼
死代碼消除
func Test() bool { return false }
func Expensive() {
if Test() {
// something expensive
}
}
在這個例子中,雖然函數(shù) Test 總是返回 false,但如果不執(zhí)行它,Expensive 就無法知道這一點。
當(dāng)測試被內(nèi)聯(lián)時,我們得到這樣的東西
func Expensive() {
if false {
// something expensive is
// now unreachable
}
}
編譯器現(xiàn)在知道無法訪問昂貴的代碼。
這不僅節(jié)省了調(diào)用 Test 的成本,還節(jié)省了編譯或運行任何現(xiàn)在無法訪問的昂貴代碼。
例如,添加一些對測試有用的代碼,
func Complicated() {
if Test() {
// something for testing
}
}
切換Test自
func Test() bool { return false }
內(nèi)聯(lián)
func Complicated() {
if false {
// something for testing
// unreachable
}
}
到
func Test() bool { return true }
內(nèi)聯(lián)
func Complicated() {
if true {
// something for testing
// reachable
}
}
包含僅用于測試的代碼可能很有用。
- 2 回答
- 0 關(guān)注
- 189 瀏覽
添加回答
舉報