>  기사  >  백엔드 개발  >  Go에서 사용자 정의 유형이 맵 키로 사용되는 것을 방지하는 방법은 무엇입니까?

Go에서 사용자 정의 유형이 맵 키로 사용되는 것을 방지하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-10-26 07:04:02366검색

How to Prevent Custom Types from Being Used as Map Keys in Go?

사용자 정의 유형에 대한 맵 키 제한

맵, 슬라이스, 함수와 같은 특정 유형은 본질적으로 맵 키로 적합하지 않습니다. 그러나 일부 개발자는 특정 사용자 정의 유형이 맵 키로 사용되는 것을 명시적으로 방지하기를 원할 수 있습니다.

처음에는 해당 유형 내의 비공개 멤버에 의존하는 것이 해결책처럼 보일 수 있지만 이 접근 방식은 효과적이지 않습니다. 이 문제를 해결하려면 언어 사양을 준수하는 보다 근본적인 솔루션이 필요합니다.

어떤 유형을 맵 키로 사용하는 것을 금지하는 핵심은 비교 연산자에 대한 요구 사항을 위반하는 것입니다. 사양에 따르면 맵 키 유형에는 완전히 정의된 비교 연산자 == 및 !=가 있어야 합니다. 따라서 비교할 수 없는 유형의 필드를 포함하면 전체 유형을 효과적으로 비교할 수 없게 만들 수 있습니다.

예를 들어 다음 유형을 고려하세요.

type MyType struct {
    A *A
    b b
    notComparable []int
}

필드 추가 슬라이스 유형을 사용하는 notComparable은 전체 MyType을 비교할 수 없도록 렌더링하여 맵 키로 사용하는 것을 방지합니다. 이는 슬라이스를 비교할 수 없기 때문입니다.

m := map[MyType]int{} // Compile-time error: invalid map key type MyType

비교할 수 없는 필드를 도입하면 더 많은 의미가 있을 수 있다는 점에 주목할 필요가 있습니다. 예를 들어 == 및 !=와 같은 연산자를 사용하여 해당 유형의 값을 비교할 수 없게 됩니다. 그러나 유형을 신중하게 설계하면 해당 유형이 맵 키로 사용되는 것을 방지하면서 특정 필드에 대한 비교성을 유지할 수 있습니다.

위 내용은 Go에서 사용자 정의 유형이 맵 키로 사용되는 것을 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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