>  기사  >  백엔드 개발  >  해당 필드가 비교할 수 있는데 Go 구조체를 `>=`와 비교할 수 없는 이유는 무엇입니까?

해당 필드가 비교할 수 있는데 Go 구조체를 `>=`와 비교할 수 없는 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-10 19:58:03169검색

Why Can't I Compare Go Structs with `>=` 서로의 분야가 비교될 수 ​​있는 때는 언제인가? 
=` 그들의 분야가 언제 비교될 수 ​​있나요? " />

Go 구조체 비교: 예기치 않은 오류

Go 프로그래밍 언어 사양에는 비교 가능한 필드만 있는 구조체도 비교 가능해야 한다고 명시되어 있습니다. 그러나 다음 코드는 실패합니다. 컴파일:

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")
  }
}

오류 메시지:

잘못됨 연산: alice >= carol(연산자 >= 구조체에 정의되지 않음)

이 오류는 사양과 모순됩니다. 해당 필드가 있는 경우 구조체는 비교할 수 있어야 하기 때문입니다.

설명:

Student 구조체의 필드를 비교할 수 있지만(== 및 != 사용) 순서가 지정되지 않음. 순서 연산자(<, <=, >, >=)는 정수 또는 문자열과 같이 순서가 지정된 피연산자에만 사용할 수 있습니다.

Go 프로그래밍 언어 사양에는 다음과 같이 명시되어 있습니다. 구조체는 비교 가능하지만 순서가 지정되지 않습니다.

동등 연산자 == 및 !=는 비교 가능한 피연산자에 적용됩니다. <, <=, > 및 >=는 순서가 지정된 피연산자에 적용됩니다.

...

  • 모든 필드가 비교 가능하면 구조체 값도 비교할 수 있습니다. 비어 있지 않은 해당 필드가 동일하면 두 구조체 값은 동일합니다.

따라서 해당 필드가 비교 가능하더라도 >=를 사용하여 Student 구조체를 비교할 수 없습니다.

위 내용은 해당 필드가 비교할 수 있는데 Go 구조체를 `>=`와 비교할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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