Go 中的短路求值:執行順序與效能
在程式設計中,短路求值是一種對邏輯運算式求值值的最佳化技術如果結果已知,則僅部分地進行。這可以透過避免不必要的計算來提高效能。
在 Go 中,短路評估是針對 &&(邏輯與)和 || 實現的。 (邏輯或)運算子。這意味著,如果邏輯表達式的第一個運算元對於 && 計算結果為 false,或對於 || 計算結果為 true,則不會計算第二個運算元。
請考慮以下程式碼片段:
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(&queries) 的呼叫。這是因為 Go 遵循短路評估規則。
為了示範這一點,請考慮以下程式碼:
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
這表示Go 計算邏輯OR 表達式( testFunc(1)) 的第一個運算元並立即傳回true,因為true ||任何事情總是正確的。因此,第二個操作數 (testFunc(2)) 從未被實際呼叫。
因此,當應用短路評估時,Go 中邏輯表達式中的條件順序可能會對效能產生影響。最佳順序將取決於具體情況以及每個條件為真或為假的可能性。
以上是Go 的短路求值如何影響邏輯表達式中條件的順序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!