和
m := map[string]any{"a": 1, "b": 2, "c": []int{2, 3, 4}}
v := reflect.ValueOf(m)
如何在"c"
中进行迭代v
?
参见https://go.dev/play/p/KQ_UNjm-Vqd
package main
import (
"fmt"
"reflect"
)
func main() {
m := map[string]any{"a": 1, "b": 2, "c": []int{2, 3, 4}}
v := reflect.ValueOf(m)
// Access the "c" key
cKey := reflect.ValueOf("c")
cValue := v.MapIndex(cKey)
if cValue.IsValid() && cValue.Kind() == reflect.Slice {
fmt.Println("Iterating through 'c':")
for i := 0; i < cValue.Len(); i++ {
fmt.Println(cValue.Index(i).Interface())
}
} else {
fmt.Println("'c' is not a valid slice or key does not exist.")
}
if !cValue.IsValid() {
fmt.Println("Key 'c' not found in the map")
return
}
if cValue.Kind() != reflect.Slice {
fmt.Println("Value for key 'c' is not a slice")
return
}
}
(我在这上面花了太长时间)
要迭代
reflect.Value
表示 的 aMap
,我们可以利用包MapKeys
中的方法reflect
。这是一个完整的示例:实时代码
关键点
MapKeys()
或的方法MapIndex()
会对非 Map 值产生恐慌资料来源:
Reflect.Value
文档Reflect.MapKeys
文档Reflect.MapIndex
文档