golang检查切片的长度,如果它是切片映射[string]接口{}
我想看看golang检查切片的长度,如果它是切片映射[string]接口{},go,reflection,slice,Go,Reflection,Slice,我想看看v的类型是否是切片。如果是的话,我想检查一下它的长度 var a = make(map[string]interface{}) a["a"] = 1 a["b"] = []string{"abc", "def"} a["c"] = []int{1,2,3} for k, v := range a { if reflect.TypeOf(v).Kind() == reflect.Slice { t.Log("Length of map", k, len(v))
v
的类型是否是切片
。如果是的话,我想检查一下它的长度
var a = make(map[string]interface{})
a["a"] = 1
a["b"] = []string{"abc", "def"}
a["c"] = []int{1,2,3}
for k, v := range a {
if reflect.TypeOf(v).Kind() == reflect.Slice {
t.Log("Length of map", k, len(v)) // invalid argument v (type interface {}) for len
}
}
既然我知道这是一个切片,我该如何检查切片的长度
预期产出:
Length of map b 2
Length of map c 3
v
仍然是一个接口{}
,您无法对其应用len()。您可以使用反射来获取长度,其中reflect.ValueOf(v).Len()
v
仍然是一个接口{}
,您无法将Len()
应用于该接口。您可以使用reflection通过reflect.ValueOf(v).Len()
获取长度。请注意,如果v的类型不是数组、切片、通道、贴图或字符串,Len()将在此处死机。为了确保它不会死机,请确保保留您的reflect.TypeOf(v).Kind()
check.Yes。在问题中,他已经检查了类型是否为slice。Yeppers在发布后看到,编辑了对suite的注释。请注意,如果v的类型不是数组、slice、通道、映射或字符串,Len()将在这里死机。为了确保它不会死机,请确保保留您的reflect.TypeOf(v).Kind()
check.Yes。在问题中,他已经检查了类型是否为slice.Yeppers,在发布后,他看到了编辑后的评论。