//把类似slice的map转为slice
func MapToSlice(input interface{}) []interface{} {
output := []interface{}{}
for i,l := 0,len(input); i < l; i++ {
output = append(output,input[i])
}
return output
}
//用法
got := MapToSlice(map[int]string{
0:"haha",
1:"heihei",
2:"hopho",
})
fmt.Println(got)
以上是错误的写法,因为len
不能接收interface{}
作为参数,也不能用input[i]
的方式取值。
以上的函数如果input
的类型改为map[int]interface{}
,则可以,但是编译时又会报传入的参数类型不正确
当你以 interface 接受的时候,你对原来的值就一无所知了,但可以使用反射来获取它的值。
延用你的写法可以这样写:
但需要注意的是,这里返回的值是 reflect.Value 类型