ホームページ >バックエンド開発 >Golang >Go で値の平等性をエレガントにチェックするには?

Go で値の平等性をエレガントにチェックするには?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-04 06:33:29286ブラウズ

How to Elegantly Check Value Equality in Go?

Go で値の等価性を確認するエレガントな方法

Go では、コンパイル エラーを避けるために複数の値の等価性を比較する際に慎重な考慮が必要です。 if a == b == c という単純なアプローチでは構文エラーが発生しますが、この問題にはいくつかの洗練された解決策があります。

1.ブール演算との結合:

&& 演算子を使用して比較を要約すると、コンパクトで読みやすいアプローチが提供されます:

<code class="go">if a == b && a == c {
    // All 3 values are equal
}</code>

2.マップ セットの実装:

マップをセットとして使用すると、値の一意性を効果的に判断できます。これは、値が等しいと単一のキーと値のペアを持つマップが作成されるためです:

<code class="go">m := map[interface{}]int{a: 0, b: 0, c: 0}
if len(m) == 1 {
    // All 3 values are equal
}</code>

3.配列の比較:

Go の配列は比較可能であり、簡単な解決策を提供します:

<code class="go">arr1 := [2]interface{}{a, b}
arr2 := [2]interface{}{b, c}
if arr1 == arr2 {
    // All 3 values are equal
}</code>

4.トリッキーなマップ:

創造的なアプローチには、マップを使用して等価性に基づいてブール値を割り当て、それを別のキーを使用して取得することが含まれます:

<code class="go">m := map[interface{}]bool{a: b == c}
if m[b] {
    // All 3 values are equal
}</code>

5。匿名構造体:

構造体は Go でも比較可能であり、簡潔な値の比較が可能です:

<code class="go">s1 := struct{ a, b interface{} }{a, b}
s2 := struct{ a, b interface{} }{b, c}
if s1 == s2 {
    // All 3 values are equal
}</code>

6。ヘルパー関数を備えた (名前付き) 構造体:

カスタム ヘルパー関数を作成すると、構造体比較の優雅さを強化できます:

<code class="go">type P struct{ a, b interface{} }

func AllEquals(s P, t P) bool {
    return s == t
}

// Usage:
if AllEquals(P{a, b}, P{b, c}) {
    // All 3 values are equal
}</code>

7. Reflect.DeepEqual() を使用したスライス:

スライスは比較できないため、等しいかどうかを判断するためにリフレクションを使用する必要があります:

<code class="go">slice1 := []interface{}{a, b}
slice2 := []interface{}{b, c}
if reflect.DeepEqual(slice1, slice2) {
    // All 3 values are equal
}</code>

これらのソリューションは、エレガントに比較するための多様な方法を提供します。 3 つの値が等しく、さまざまな設定やコード スタイルに対応します。

以上がGo で値の平等性をエレガントにチェックするには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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