ホームページ > バックエンド開発 > Golang > 比較可能なフィールドがあるにもかかわらず、Go で構造体の比較が失敗するのはなぜですか?

比較可能なフィールドがあるにもかかわらず、Go で構造体の比較が失敗するのはなぜですか?

Susan Sarandon
リリース: 2024-11-08 10:03:02
オリジナル
1008 人が閲覧しました

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. Ordered

この失敗を理解する鍵は、比較可能性と順序可能性を区別することにあります。

  • 比較可能: 構造体は、すべてのフィールドが比較可能であれば比較可能です。
  • 順序付け: 構造体は、すべてのフィールドが次の場合に順序付けされます。

Student 構造体のフィールドは確かに比較可能ですが、>= 演算子は順序付けです。演算子であり、比較可能な演算子ではありません。この区別は Go 仕様で明示的に言及されており、構造体の値は「すべてのフィールドが比較可能な場合は比較可能」と定義されていますが、「対応する空白以外のフィールドが等しい場合は等しい」とのみ定義されています。このコンテキストでは順序付けについては言及されていません。

結論

このコンパイル時エラーを引き起こした誤解は、比較可能性が順序付け可能性を暗黙的に想定していることに起因します。 Go では、これらは別個の概念です。構造体は等しいかどうか比較できますが、フィールドが特定の順序関係を提供しない限り、デフォルトでは順序付けできません。

以上が比較可能なフィールドがあるにもかかわらず、Go で構造体の比較が失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート