> 백엔드 개발 > Golang > Go의 단락 평가는 논리식의 조건 순서에 어떤 영향을 미치나요?

Go의 단락 평가는 논리식의 조건 순서에 어떤 영향을 미치나요?

Linda Hamilton
풀어 주다: 2024-11-07 17:04:03
원래의
784명이 탐색했습니다.

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

Go에서의 단락 평가: 실행 순서 및 성능

프로그래밍에서 단락 평가는 논리식을 평가하는 최적화 기법입니다. 결과가 이미 알려진 경우 부분적으로만 가능합니다. 이는 불필요한 계산을 피함으로써 성능을 향상시킬 수 있습니다.

Go에서는 &&(논리 AND) 및 ||에 대해 단락 평가가 구현됩니다. (논리 OR) 연산자. 즉, 논리식의 첫 번째 피연산자가 &&에 대해 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿