Go 中的短路評估
在電腦程式設計中,短路評估是一種最佳化技術,它透過跳過條件語句來提高條件語句的性能。一旦滿足一個條件,就評估後續條件。這種行為是為了避免不必要的計算,特別是當一個條件隱式暗示其他條件的結果時。
Go 的短路評估
Go 遵循短路原理評估。換句話說,在 if 語句中,Go 僅在前面的條件不滿足時才評估後續條件。這適用於 if-else 語句和不帶 else 子句的 if 語句。
效能比較
讓我們分析一下問題中提供的兩個程式碼片段:
if !isValidQueryParams(&queries) || r == nil || len(queries) == 0 { return "", fmt.Errorf("invalid querystring") }
if r == nil || len(queries) == 0 || !isValidQueryParams(&queries) { return "", fmt.Errorf("invalid querystring") }
這兩種情況下,如果r == nil 或len(queries) == 0 中,isValidQueryParams 函數不會被調用,因為整體表達式已經為false。因此,效能優化在此特定上下文中可能並不重要。
範例
要示範短路評估的實際情況,請考慮以下程式碼:
package main import "fmt" func main() { for i := 0; i < 10; i++ { if testFunc(1) || testFunc(2) { // do nothing } } } func testFunc(i int) bool { fmt.Printf("function %d called\n", i) return true }
執行此程式碼將列印:
function 1 called function 1 called function 1 called function 1 called function 1 called function 1 called function 1 called function 1 called function 1 called function 1 called
如您所見,帶有參數2 的testFunc 函數永遠不會被調用,因為第一個條件(testFunc(1)) 的計算結果總是true。這說明了短路評估如何防止不必要的函數呼叫。
以上是Go 中的短路評估如何運作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!