ホームページ > バックエンド開発 > Golang > Go で値の型が異なるがキーの型が同じマップを処理するにはどうすればよいですか?

Go で値の型が異なるがキーの型が同じマップを処理するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-27 04:15:10
オリジナル
927 人が閲覧しました

How Can I Handle Maps with Different Value Types But the Same Key Type in Go?

マップ処理における型の不一致を克服する

問題:
Go でマップを操作する場合、多くの場合、次のキーを使用することが望ましいです。同じ型ですが、異なる型の値です。ただし、値の型としてインターフェイス{}を持つキーの型を取る関数を作成しようとすると制約があります。

失敗したアプローチ:

func main() {
    mapOne := map[string]int
    mapTwo := map[string]double
    mapThree := map[string]SomeStruct

    useKeys(mapOne)
}

func useKeys(m map[string]interface{}) {
    //something with keys here
}
ログイン後にコピー

上記のコードは型が一致しないためコンパイルできません。 Go のマップは共変ではありません。つまり、同じキー タイプで異なる値タイプを受け入れることができません。

解決策:

この問題に対する洗練された解決策はありません。 Go に固有の制限があります。リフレクションを使用した回避策があります。

func useKeys(m interface{}) {
    v := reflect.ValueOf(m)
    if v.Kind() != reflect.Map {
        fmt.Println("not a map!")
        return
    }

    keys := v.MapKeys()
    fmt.Println(keys)
}
ログイン後にコピー

このコードはインターフェースの値を受け取り、リフレクションを使用して決定します。{}それが地図であれば。存在する場合、そのマップのキーを抽出して出力します。

注:

リフレクションを使用する場合、その制限に留意することが重要です。実行時のパフォーマンスのオーバーヘッドと複雑さが発生します。可能であれば、特定の値タイプに特定のマップ タイプを使用することが、パフォーマンスと保守性の観点から引き続き推奨されるアプローチです。

以上がGo で値の型が異なるがキーの型が同じマップを処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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