ホームページ > バックエンド開発 > Golang > インターフェースから反映されたマップを反復処理する方法{}

インターフェースから反映されたマップを反復処理する方法{}

DDD
リリース: 2024-12-01 00:52:11
オリジナル
546 人が閲覧しました

How to Iterate Over a Map Reflected from an Interface{}?

インターフェイスから反映されたマップの反復

Q: インターフェイス{}をマップに変換し、それを反復処理する

構造体、構​​造体のスライス、およびマップを含むさまざまなデータ構造を受け入れることができる汎用関数を作成しようとしています。文字列キーと構造体の値を使用している場合、マップを反復処理しようとするとエラーが発生します。インターフェイスを反映すると、それが確かにマップであることがわかりますが、範囲の反復を通じてその要素にアクセスするとエラーが発生します。

A: Type Switch または Value.MapKeys を使用する

これを解決するには 2 つのアプローチがあります問題:

  1. タイプ スイッチ:

    • リフレクションの使用をタイプ スイッチに置き換えて、入力の特定のタイプを確認します。パラメータ。
    • の場合例:

      switch in := in.(type) {
      case map[string]*Book:
          for key, value := range in {
              fmt.Printf("Key: %s, Value: %v\n", key, value)
          }
      default:
          // Handle other cases as needed.
      }
      ログイン後にコピー
  2. Value.MapKeys:

    • リフレクションを使用することを主張する場合は、 Value.MapKeys を利用してマップを取得できます。キー。
    • 例:

      v := reflect.ValueOf(in)
      keys := v.MapKeys()
      for _, key := range keys {
          value := v.MapIndex(key)
          fmt.Printf("Key: %v, Value: %v\n", key.Interface(), value.Interface())
      }
      ログイン後にコピー

以上がインターフェースから反映されたマップを反復処理する方法{}の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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