ホームページ  >  記事  >  バックエンド開発  >  基本的な Golang - 同等性の比較

基本的な Golang - 同等性の比較

Barbara Streisand
Barbara Streisandオリジナル
2024-11-01 00:28:02511ブラウズ

Golang básico - Comparação de Igualdade

この投稿は、GoLang での開発に必要な基本を共有するシリーズの一部です。

== または != 演算子を使用した論理比較には、それほど謎はありません。または、コードは値が同じか異なるかを比較します。
ただし、比較対象について知っておくべき重要な詳細がいくつかあります。

同等のインターフェース

最初に、これらの演算子で何が比較できるのかを知る必要があります。これを知るための最も明白な場所は、Go ドキュメントのコンパレーターに関するセクションです

もう 1 つのオプションは、Go のジェネリックス実装とともに追加された同等のインターフェイスを調べることです。このインターフェイスを実装するすべての型は同等です。

したがって、基本的に Go で定義されたすべてのプリミティブ型 (文字列、数値 (int、float、complex)、bool など) は比較可能です。

複合型の比較

一部の型には、比較できるかどうかの条件があります。これは、構造体、スライス、チャネルの場合です。
要素も比較可能な場合にのみ比較可能です。
興味深いのは、Go がコンパイル レベルでこれを検証し、実行時エラーを回避できることです。次に例を示します。

//Esse código compila e a comparação funciona:
func main() {
    test1 := struct {
        name       string
    }{}
    test2 := struct {
        name       string
    }{}
    if test1 == test2 {
        fmt.Println("Funciona")
    }
}

上記のコードでは、同等の属性を持つ 2 つの構造体を作成しており、比較は機能します。

//Esse código não compila
func main() {
    test1 := struct {
        name       string
        attributes map[string]string
    }{}
    test2 := struct {
        name       string
        attributes map[string]string
    }{}
    if test1 == test2 {
        fmt.Println("Cade?")
    }
}

このコードは、無効な操作エラーによりコンパイルに失敗します。

これは、Go ではマップが同等の型ではないために発生します。

構造体とマップの詳細

構造体を == で比較できると非常に便利です。これらの型はモデリングをカスタマイズするためです。
ただし、比較不可能な型を使用する場合でも、コードを簡素化する方法がいくつかあり、これを知っていれば、本当に退屈な条件を記述する必要がなくなります。

それでは、学校システムで作業していて、次のような比較できない構造体があると想像してみましょう:

type student struct {
    ID         int
    name       string
    age        int
    course     string
    attributes map[string]string
}

良い点は、この構造体には ID フィールドがあるため、永続化されたデータを扱う場合が非常に簡単になります。

ここで、まだ一時的なデータを操作している場合を想像してみてください。たとえば、ファイルを読み取っていて、このデータを永続化する前に何らかの処理を行う必要がある場合です。

フィールドごとに比較するオプションが常にあり、まったく便利ではありませんが、機能します。ただし、次のように構造体の構成を利用できます:

func main() {
    type identity struct {
        name   string
        age    int
        course string
    }
    type student struct {
        ID int
        identity
        attributes map[string]string
    }

    s1 := student{
        identity: identity{
            name:   "Chuck",
            age:    10,
            course: "golang",
        },
        attributes: map[string]string{
            "last_score": "10",
        },
    }
    s2 := student{
        identity: identity{
            name:   "Chuck",
            age:    10,
            course: "golang",
        },
        attributes: map[string]string{
            "last_score": "20",
        },
    }

    s3 := student{
        identity: identity{
            name:   "Chuck",
            age:    12,
            course: "golang",
        },
        attributes: map[string]string{
            "last_score": "20",
        },
    }

    if s1.identity == s2.identity {
        fmt.Println("Achou", s1)
    }

    if s1.identity != s3.identity {
        fmt.Println("Não achou")
    }
}

このコードの代わりに、次のような条件を作成することもできます。

    if s1.name == s2.name && s1.age == s2.age && s1.course == s2.course {
        fmt.Println("Achou", s1)
    }

混乱を避けるためにこれを関数に抽出することもできますが、それでもこれらの比較を維持する必要があります。

コンポジションを上手に活用すると、コードが大幅に簡素化されます。

まとめ

  • 同等のインターフェースについて学ぶ
  • プリミティブ型は同等です
  • 複合型は比較できる場合とそうでない場合があります
  • 構図を有効に活用してください。

以上が基本的な Golang - 同等性の比較の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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