我正在尝试打印地图的类型,例如:map [int] string
func handleMap(m reflect.Value) string { keys := m.MapKeys() n := len(keys) keyType := reflect.ValueOf(keys).Type().Elem().String() valType := m.Type().Elem().String() return fmt.Sprintf("map[%s]%s>", keyType, valType) }
所以如果我这样做:
log.Println(handleMap(make(map[int]string)))
我想得到 "map[int]string"
"map[int]string"
但我找不到正确的电话。
尽量不要使用reflect。但是,如果您必须使用reflect:
reflect
reflect.Value
Type()
reflect.Type
Kind()
reflect.Map
map[T1]T2
因此,在使用时reflect,我们可以像这样将片段分开:
func show(m reflect.Value) { t := m.Type() if t.Kind() != reflect.Map { panic("not a map") } kt := t.Key() et := t.Elem() fmt.Printf("m = map from %s to %s\n", kt, et) }
在Go Playground上查看更完整的示例。(请注意,两个映射实际上都是nil,因此没有要枚举的键和值。)