【问题标题】:golang check length of a slice if it is a slice map[string]interface{}golang 检查切片的长度,如果它是切片 map[string]interface{}
【发布时间】:2017-11-27 03:40:54
【问题描述】:

我想看看v 的类型是不是slice。如果是这样,我想检查它的长度。

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

【问题讨论】:

    标签: go reflection slice


    【解决方案1】:

    v 仍然是interface{},您不能将len() 应用于它。您可以通过reflect.ValueOf(v).Len() 使用反射来获取长度。

    【讨论】:

    • 请注意,如果 v 的类型不是数组、切片、通道、映射或字符串,Len() 将在此处发生恐慌。为确保它不会出现恐慌,请确保保留您的 reflect.TypeOf(v).Kind() 支票。
    • 是的。在问题中,他已经在检查类型是切片。
    • Yeppers,看到发布后,编辑了对套件的评论。
    猜你喜欢
    • 2017-03-13
    • 1970-01-01
    • 2017-07-08
    • 2015-05-26
    • 2014-08-05
    • 2016-03-21
    • 2020-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多