> 백엔드 개발 > Golang > Go 구조체를 `>=` 또는`와 비교할 수 없는 이유

Go 구조체를 `>=` 또는`와 비교할 수 없는 이유

Mary-Kate Olsen
풀어 주다: 2024-11-09 08:36:02
원래의
284명이 탐색했습니다.

Why Can't I Compare Go Structs with `>=` 또는 `=` 또는 `" />

Go 구조체 비교: Comparable과 Ordered 사이의 오해

Go에서, 모든 필드가 비교 가능한 경우 구조체는 기본적으로 비교 가능한 것으로 간주됩니다. 이는 구조체를 동일한 유형의 변수에 할당하거나 등호 연산자(== 또는 !=)를 사용하여 동일한 유형의 다른 구조체와 비교할 수 있음을 의미합니다.

그러나 시도할 때 일반적인 오해가 발생합니다. 구조체에는 >= 또는 <=와 같은 순서가 지정된 연산자를 사용하세요. 구조체는 비교할 수 있지만 본질적으로 순서가 지정되어 있지는 않습니다. 효과적인 Go 프로그래밍을 위해서는 이러한 구별을 이해하는 것이 중요합니다.

제공된 예에서:

package main

type Student struct {
  Name  string // "String values are comparable and ordered, lexically byte-wise."
  Score uint8  // "Integer values are comparable and ordered, in the usual way."
}

func main() {
  alice := Student{"Alice", 98}
  carol := Student{"Carol", 72}

  if alice >= carol {
    println("Alice >= Carol")
  } else {
    println("Alice < Carol")
  }
}
로그인 후 복사

>=가 순서가 지정된 연산자이기 때문에 코드가 컴파일되지 않습니다. 컴파일러는 Student가 순서화된 비교를 지원하는 데 필요한 순서화된 유형으로 명시적으로 정의되지 않았음을 감지합니다. == 또는 !=를 사용하여 구조체 값이 같은지 비교할 수 있지만 순서 관계(예: <, >, <=, >=)는 정의되지 않습니다.

Go 언어 사양에는 다음이 명확하게 나와 있습니다. :

"순서 연산자 <, <=, > 및 >=는 순서가 지정된 피연산자에 적용됩니다. [...] 모든 필드가 비교 가능하면 구조체 값은 비교할 수 있습니다. 비어 있지 않은 해당 필드가 동일하면 두 구조체 값이 동일합니다."

따라서 구조체는 본질적으로 순서가 지정되지 않으며 >=와 같은 순서가 지정된 연산자는 그렇지 않습니다. 순서가 지정된 유형으로 명시적으로 선언되지 않는 한 구조체 값에서 지원됩니다. 순서화된 비교를 활성화하려면 사용자 정의 유형이 유형의 인스턴스를 정렬하고 비교하기 위한 특정 메소드를 정의해야 하는 sort.Interface 인터페이스를 구현해야 합니다.

위 내용은 Go 구조체를 `>=` 또는`와 비교할 수 없는 이유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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