Heim  >  Artikel  >  Backend-Entwicklung  >  Wie wirkt sich die Kurzschlussauswertung von Go auf die Reihenfolge der Bedingungen in logischen Ausdrücken aus?

Wie wirkt sich die Kurzschlussauswertung von Go auf die Reihenfolge der Bedingungen in logischen Ausdrücken aus?

Linda Hamilton
Linda HamiltonOriginal
2024-11-07 17:04:03777Durchsuche

How does Go's short circuit evaluation affect the order of conditions in logical expressions?

Kurzschlussauswertung in Go: Ausführungsreihenfolge und Leistung

In der Programmierung ist die Kurzschlussauswertung eine Optimierungstechnik, bei der ein logischer Ausdruck ausgewertet wird nur teilweise, wenn das Ergebnis bereits bekannt ist. Dies kann die Leistung verbessern, indem unnötige Berechnungen vermieden werden.

In Go ist die Kurzschlussauswertung für && (logisches UND) und || implementiert (logische ODER-)Operatoren. Das heißt, wenn der erste Operand eines logischen Ausdrucks für && als falsch oder für || als wahr ausgewertet wird, wird der zweite Operand nicht ausgewertet.

Beachten Sie die folgenden Codeausschnitte:

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")
}

Wenn r in beiden Fällen Null ist oder len(queries) 0 ist, wird der Aufruf von isValidQueryParams(&queries) nicht ausgeführt, unabhängig von der Reihenfolge der Bedingungen. Dies liegt daran, dass Go den Regeln zur Kurzschlussauswertung folgt.

Um dies zu demonstrieren, betrachten Sie den folgenden Code:

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
}

Beim Ausführen dieses Codes wird immer Folgendes ausgegeben:

$ 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

Dies zeigt, dass Go den ersten Operanden des logischen OR-Ausdrucks (testFunc(1)) auswertet und sofort true zurückgibt, weil true || alles ist immer wahr. Daher wird der zweite Operand (testFunc(2)) nie tatsächlich aufgerufen.

Daher kann die Reihenfolge der Bedingungen in einem logischen Ausdruck in Go Auswirkungen auf die Leistung haben, wenn eine Kurzschlussauswertung angewendet wird. Die optimale Reihenfolge hängt von den spezifischen Umständen und der Wahrscheinlichkeit ab, dass jede Bedingung wahr oder falsch ist.

Das obige ist der detaillierte Inhalt vonWie wirkt sich die Kurzschlussauswertung von Go auf die Reihenfolge der Bedingungen in logischen Ausdrücken aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn