如何从golang中的map中统一获取一片key?
How to get a slice of keys from map in golang uniformly?
我试过了
func Keys(m map[string]interface{}) []string {
keys := make([]string, 0, len(m))
for k := range m {
keys = append(keys, k)
}
return keys
}
但是
cannot use m (type map[string]int) as type map[string]interface {} in argument to Keys
我知道golang不支持泛型,请问是否可以统一获取keys slice?
使用 reflect 包从具有任意值类型的映射中获取字符串键:
func Keys(v interface{}) ([]string, error) {
rv := reflect.ValueOf(v)
if rv.Kind() != reflect.Map {
return nil, errors.New("not a map")
}
t := rv.Type()
if t.Key().Kind() != reflect.String {
return nil, errors.New("not string key")
}
var result []string
for _, kv := range rv.MapKeys() {
result = append(result, kv.String())
}
return result, nil
}
我试过了
func Keys(m map[string]interface{}) []string {
keys := make([]string, 0, len(m))
for k := range m {
keys = append(keys, k)
}
return keys
}
但是
cannot use m (type map[string]int) as type map[string]interface {} in argument to Keys
我知道golang不支持泛型,请问是否可以统一获取keys slice?
使用 reflect 包从具有任意值类型的映射中获取字符串键:
func Keys(v interface{}) ([]string, error) {
rv := reflect.ValueOf(v)
if rv.Kind() != reflect.Map {
return nil, errors.New("not a map")
}
t := rv.Type()
if t.Key().Kind() != reflect.String {
return nil, errors.New("not string key")
}
var result []string
for _, kv := range rv.MapKeys() {
result = append(result, kv.String())
}
return result, nil
}