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

値の型に関係なく、Go でマップ キーにアクセスするにはどうすればよいですか?

Barbara Streisand
リリース: 2025-01-01 07:35:10
オリジナル
893 人が閲覧しました

How Can I Access Map Keys in Go Regardless of Value Type?

異なる値タイプを持つマップの操作

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
}
ログイン後にコピー

この例では、3 つのマップがあります。mapOne は整数を保持し、mapTwo は double 値を格納し、mapThree には SomeStruct のインスタンスが含まれます。私たちの目標は、文字列キーと、interface{} で示される任意の値タイプを含むマップを受け入れる関数 useKeys を作成することです。ただし、この設計は期待どおりに機能しません。

共分散の課題

Go では、マップとスライスは一般的な構造ですが、共分散がありません。これは、map[string]int を map[string]interface{} 型の変数に割り当てることはできるが、割り当てられたマップの値をエラーを発生させずに安全に変更することはできないことを意味します。

あまりエレガントではありませんが、しかし、機能的解決策

値の型に関係なくマップのキーのみを取得する必要がある場合は、次の方法に頼ることができます。リフレクション:

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 までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート