繰り返しによるインターフェース{}のマップへの変換
コード内で、インターフェース{}をマップに変換しようとしているときにエラーが発生しました。この問題を解決し、マップ要素の反復を有効にするには、次の手順に従います。
アサーションを使用する:
で示すように、リフレクション ベースのアプローチを直接型アサーションに置き換えます。以下のコード:
func process(in interface{}, isSlice bool, isMap bool) { if isMap { v := in.(map[string]*Book) fmt.Printf("Type: %v\n", v) for _, s := range v { fmt.Printf("Value: %v\n", s) } } }
このアサーションは、interface{} 値をタイプ map[string]*Book の変数に割り当てます。条件が満たされた場合。このアプローチはより効率的であり、リフレクションを必要としません。
または、switch ステートメントを使用して、リフレクションを使用せずにさまざまなタイプの入力を処理できます。
リフレクションでカスタム マップ キーを使用する (オプション):
それでもリフレクションを使用する必要がある場合は、代わりに Value.MapKeys を使用してマップ キーを取得できます。値を直接反復処理します。このアプローチの詳細については、提供されたソリューションに記載されている Stack Overflow の回答を参照してください。
以上がインターフェイス{}からの変換後に、map[string]*Book を安全に反復処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。