要编写一个函数,无论地图的值类型是什么,都能从地图中获取字符串键的切片,可以使用反射来实现。以下是一个示例代码:
package main
import (
"fmt"
"reflect"
)
func getStringKeys(m interface{}) []string {
v := reflect.ValueOf(m)
if v.Kind() != reflect.Map {
return nil
}
keys := make([]string, 0)
iter := v.MapRange()
for iter.Next() {
key := iter.Key()
if key.Kind() != reflect.String {
continue
}
keys = append(keys, key.String())
}
return keys
}
func main() {
// 示例地图
m := map[string]int{
"a": 1,
"b": 2,
"c": 3,
}
// 获取字符串键的切片
keys := getStringKeys(m)
fmt.Println(keys) // 输出: [a b c]
}
在上面的示例代码中,getStringKeys
函数接受一个参数 m
,使用反射获取传入地图的类型,并检查它是否为地图类型。然后,它使用 MapRange
函数迭代地图,获取键值对。如果键的类型为字符串,则将其转换为字符串,并添加到结果切片中。
在 main
函数中,我们定义了一个包含字符串键的示例地图,并调用 getStringKeys
函数来获取字符串键的切片,并打印输出。输出结果为 ["a", "b", "c"]
。