ホームページ >バックエンド開発 >Golang >異なる値タイプの Go マップからキーにアクセスするにはどうすればよいですか?

異なる値タイプの Go マップからキーにアクセスするにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-20 01:42:091009ブラウズ

How Can I Access Keys from Go Maps with Different Value Types?

異なる値型を持つマップのキーへのアクセス

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 ではそれを認識する必要があります。 、異なる値タイプのマップに対して特定のロジックを複製する必要がある場合があります。

ただし、任意のマップからキーを取得する柔軟性が必要な場合は、リフレクションを次のように行うことができます。採用:

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 サイトの他の関連記事を参照してください。

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