구조체의 모든 필드가 비교 가능한 구조체 비교성에 대한 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") } }
이 실패를 이해하는 열쇠는 비교 가능성과 순서 가능성을 구별하는 데 있습니다.
Student 구조체의 필드는 실제로 비교할 수 있지만 >= 연산자는 순서 연산자이지 비교 연산자가 아닙니다. 이러한 구별은 Go 사양에 명시적으로 언급되어 있습니다. 구조체 값은 "모든 필드가 비교 가능하면 비교 가능"으로 정의되지만 "공백이 아닌 해당 필드가 동일하면 동일"으로 정의됩니다. 이 맥락에서 순서 지정은 언급되지 않습니다.
이 컴파일 시간 오류를 초래한 오해는 비교 가능성이 순서 가능성을 의미한다는 가정에서 비롯됩니다. Go에서는 이것들이 별개의 개념입니다. 구조체가 동일한지 비교할 수는 있지만 해당 필드가 특정 순서 관계를 제공하지 않는 한 기본적으로 순서를 지정할 수 없습니다.
위 내용은 비교 가능한 필드에도 불구하고 Go에서 구조체 비교가 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!