Go에서는 여러 변수의 동일성을 비교하는 것이 어려울 수 있습니다. if a == b == c의 간단한 접근 방식은 컴파일 오류를 초래하지만 우아하고 효율적인 솔루션을 제공하는 몇 가지 대체 방법이 있습니다.
권장 및 세 값이 동일한지 확인하는 가장 간결한 방법은 다음과 같습니다.
<code class="go">if a == b && a == c { fmt.Println("All 3 are equal") }</code>
이 방법은 Go가 두 값을 비교할 때 부울 값을 반환한다는 사실을 활용하여 명확하고 읽기 쉬운 코드를 보장합니다.
위의 솔루션이 최적이지만 실험을 위해 탐색할 수 있는 다양한 창의적 옵션이 있습니다.
세트로 매핑:
<code class="go">if len(map[interface{}]int{a: 0, b: 0, c: 0}) == 1 { fmt.Println("Via a map set: all 3 are equal") }</code>
이 방법의 기본 개념은 값을 맵에 키로 추가하고, 값이 모두 같을 경우 맵에는 하나의 키만 포함되어 길이가 1이 되는 것입니다.
배열:
<code class="go">if [2]interface{}{a, b} == [2]interface{}{b, c} { fmt.Println("Via arrays: all 3 are equal") }</code>
배열은 본질적으로 비교 가능하므로 ==를 사용하여 세 가지 값을 비교할 수 있습니다. 그러나 이 접근 방식은 특정 개수의 값을 비교하는 데에만 적합합니다.
까다로운 맵:
<code class="go">if map[interface{}]bool{a: b == c}[b] { fmt.Println("Via a tricky map: all 3 are equal") }</code>
이 방법은 맵을 활용하여 다음의 결과를 할당합니다. b == c를 키에 연결한 다음 동일한 키와 연결된 값에 액세스합니다. a == b이면 b == c의 결과가 반환되어 같음을 나타냅니다.
익명 구조체:
<code class="go">if struct{ a, b interface{} }{a, b} == struct{ a, b interface{} }{b, c} { fmt.Println("Via anonymous structs: all 3 are equal") }</code>
중첩 구조체는 비교할 수 있으므로 간결한 구문으로 세 개의 값을 비교합니다.
슬라이스:
<code class="go">if reflect.DeepEqual([]interface{}{a, b}, []interface{}{b, c}) { fmt.Println("Via slices: all 3 are equal") }</code>
슬라이스 자체는 비교할 수 없지만, Reflect.DeepEqual() 함수는 동등성을 결정할 수 있습니다. , 내용을 비교할 수 있습니다.
도우미 함수:
<code class="go">func AllEquals(v ...interface{}) bool { if len(v) > 1 { a := v[0] for _, s := range v { if a != s { return false } } } return true }</code>
이 재사용 가능한 함수는 반복적으로 동일성을 확인하고 부울 결과를 반환하여 여러 값의 비교를 단순화합니다. . 다양한 변수와 함께 사용할 수 있습니다.
위 내용은 Go에서 세 가지 값 사이의 동등성을 효율적으로 확인하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!