ホームページ >バックエンド開発 >Golang >フィールドが比較可能な場合、Go 構造体を `>=` と比較できないのはなぜですか?

フィールドが比較可能な場合、Go 構造体を `>=` と比較できないのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-10 19:58:03176ブラウズ

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 (operator >= 構造体で定義されていません)

このエラーは、

説明:

Student 構造体のフィールドは (== と != を使用して) 比較できます。順序付け演算子 (<、<=、>、>=) は、整数や文字列などの順序付けされたオペランドでのみ使用できます。

Go プログラミング言語仕様

等価演算子 == および != は、比較可能なオペランドに適用されます。順序付け演算子 <、<=、>、および > は、構造体が比較可能であることを明確に示しています。 = 順序付けされたオペランドに適用します。

...

  • すべてのフィールドが比較可能な場合、構造体の値は比較可能です。 2 つの構造体の値は、対応する空白以外のフィールドが等しい場合に等しいと見なされます。

したがって、フィールドが比較可能であっても、>= を使用して Student 構造体を比較することはできません。

以上がフィールドが比較可能な場合、Go 構造体を `>=` と比較できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。