異なる値型を持つマップのキーへのアクセス
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 サイトの他の関連記事を参照してください。