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,在发布后,他看到了编辑后的评论。