首頁 > 後端開發 > Golang > 主體

Go 中的短路評估如何運作?

DDD
發布: 2024-11-08 05:21:01
原創
1055 人瀏覽過

How Does Short Circuit Evaluation Work in Go?

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板