ホームページ > バックエンド開発 > Golang > Go での短絡評価はどのように機能しますか?

Go での短絡評価はどのように機能しますか?

DDD
リリース: 2024-11-08 05:21:01
オリジナル
1063 人が閲覧しました

How Does Short Circuit Evaluation Work in Go?

Go での短絡評価

コンピューター プログラミングにおいて、短絡評価は、条件文をスキップすることで条件文のパフォーマンスを向上させる最適化手法です。 1 つの条件が満たされると、その後の条件が評価されます。この動作は、特に 1 つの条件が他の条件の結果を暗黙的に暗示している場合に、不必要な計算を避けることを目的としています。

Go の短絡評価

Go は短絡の原理に従います。評価。言い換えれば、if ステートメントでは、Go は前の条件が満たされない場合にのみ後続の条件を評価します。これは、if-else ステートメントと else 句のない if ステートメントの両方に当てはまります。

パフォーマンスの比較

質問に示されている 2 つのコード スニペットを分析してみましょう。

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 の場合、式全体がすでに false であるため、isValidQueryParams 関数は呼び出されません。したがって、この特定のコンテキストでは、パフォーマンスの最適化は重要ではない可能性があります。

実際の短絡評価を示すために、次のコードを検討してください。

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
ログイン後にコピー

ご覧のとおり、最初の条件 (testFunc(1)) は常に true と評価されるため、引数 2 を持つ testFunc 関数は呼び出されません。これは、短絡評価によって不要な関数呼び出しがどのように防止されるかを示しています。

以上がGo での短絡評価はどのように機能しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート