> 백엔드 개발 > Golang > 비교 가능한 필드에도 불구하고 Go에서 구조체 비교가 실패하는 이유는 무엇입니까?

비교 가능한 필드에도 불구하고 Go에서 구조체 비교가 실패하는 이유는 무엇입니까?

Susan Sarandon
풀어 주다: 2024-11-08 10:03:02
원래의
1007명이 탐색했습니다.

Why Does Struct Comparison Fail in Go Despite Comparable Fields?

Go 구조체 비교: 예상 비교가 실패하는 이유

구조체의 모든 필드가 비교 가능한 구조체 비교성에 대한 Go 사양을 준수함에도 불구하고 다음 코드는 실패합니다. 컴파일:

type Student struct {
  Name  string 
  Score uint8  
}

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

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

잃어버린 구별: 비교 가능 vs. 순서 지정

이 실패를 이해하는 열쇠는 비교 가능성과 순서 가능성을 구별하는 데 있습니다.

  • 비교 가능: 구조체는 모든 필드가 비교할 수 있으면 비교할 수 있습니다.
  • 순서: 구조체는 모든 필드가 정렬되어 있으면 정렬됩니다. <, < =, > 및 >=를 사용해야 합니다.

    Student 구조체의 필드는 실제로 비교할 수 있지만 >= 연산자는 순서 연산자이지 비교 연산자가 아닙니다. 이러한 구별은 Go 사양에 명시적으로 언급되어 있습니다. 구조체 값은 "모든 필드가 비교 가능하면 비교 가능"으로 정의되지만 "공백이 아닌 해당 필드가 동일하면 동일"으로 정의됩니다. 이 맥락에서 순서 지정은 언급되지 않습니다.

    결론

    이 컴파일 시간 오류를 초래한 오해는 비교 가능성이 순서 가능성을 의미한다는 가정에서 비롯됩니다. Go에서는 이것들이 별개의 개념입니다. 구조체가 동일한지 비교할 수는 있지만 해당 필드가 특정 순서 관계를 제공하지 않는 한 기본적으로 순서를 지정할 수 없습니다.

    위 내용은 비교 가능한 필드에도 불구하고 Go에서 구조체 비교가 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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