>백엔드 개발 >Golang >Go에서 세 가지 값의 동등성을 우아하게 확인하는 방법은 무엇입니까?

Go에서 세 가지 값의 동등성을 우아하게 확인하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-04 06:12:29447검색

How to Elegantly Check Equality of Three Values in Go?

가치 평등에 대한 연쇄 비교의 대안

세 가지 값의 동등성을 비교할 때 if a == b == c를 사용하면 다음이 됩니다. 유형 불일치로 인한 컴파일 오류. a == b && a == c가 유효한 대안인 경우에는 번거로워 보일 수 있습니다. 이 기사에서는 세 값의 동등성을 우아하게 확인하는 여러 창의적인 방법을 살펴봅니다.

옵션 1: 집합으로 매핑

세 값을 키로 사용하여 맵을 생성합니다. , 맵의 길이가 1인지 확인하여 모든 값이 동일한지 확인할 수 있습니다. 이 접근 방식은 유연하며 3개 이상의 값을 수용할 수 있습니다.

<code class="go">if len(map[interface{}]int{a: 0, b: 0, c: 0}) == 1 {
    fmt.Println("Map set: all 3 are equal")
}</code>

옵션 2: 배열

Go의 배열은 슬라이스와 달리 비교 가능합니다. 세 값의 해당 요소와 배열을 비교하여 동일한지 확인할 수 있습니다.

<code class="go">if [2]interface{}{a, b} == [2]interface{}{b, c} {
    fmt.Println("Arrays: all 3 are equal")
}</code>

옵션 3: 까다로운 지도

지도의 동작을 활용하여 다음을 수행할 수 있습니다. b == c에 대한 단일 비교를 수행한 다음 세 값의 전체 동일성에 대한 프록시로 b의 결과 값에 액세스합니다.

<code class="go">if map[interface{}]bool{a: b == c}[b] {
    fmt.Println("Tricky map: all 3 are equal")
}</code>

옵션 4: 익명 구조체

Go의 구조체 값도 비슷합니다. 두 개의 필드가 있는 익명 구조체를 생성하고 세 개의 값이 포함된 구조체를 비교하고 동일한지 확인할 수 있습니다.

<code class="go">if struct{ a, b interface{} }{a, b} == struct{ a, b interface{} }{b, c} {
    fmt.Println("Anon structs: all 3 are equal")
}</code>

옵션 5: 도우미 함수

우리는 임의 개수의 값을 시드 값과 반복적으로 비교하여 값의 동일성을 확인하는 도우미 함수를 정의할 수 있습니다.

<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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.