亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 200 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號