How do you access certain parts of an array with type []interface{} in Go?

huangapple go评论79阅读模式
英文:

How do you access certain parts of an array with type []interface{} in Go?

问题

我有一个包含字符串键和不同类型值的映射,打印出来的样子是这样的:

map[command:ls count:[1 1]]

当对 count 使用 reflect.TypeOf 进行检查时,返回的类型是 []interface{}。我无法通过索引访问这些值,如果我尝试将其传递给一个接受 []interface{} 类型参数的函数,它会报告我试图传递一个类型为 interface{} 的值。

我想在这个例子中访问 count,它应该有两个值,即 11

英文:

I have a map with string keys and different types for values, when printing it looks like this:

map[command:ls count:[1 1]]

When checking reflect.TypeOf on the count it returns type []interface{}. I cannot access the values by index, and if I try passing it into a function that accept a param of type []interface{} it claims that I'm tying to pass a value of type interface{}

I would like to access the count in this example which would be 2 values. 1 and 1.

答案1

得分: 6

你需要区分类型和底层类型。你的映射类型是 map[string]interface{}。这意味着 count 的值是 interface{} 类型,其底层类型是 []interface{}。因此,你不能将 count 作为 []interface{} 类型传递。在使用它作为数组之前,你需要进行类型断言。每个项目的类型将是 interface{},可以进一步断言为 int(根据你的数据似乎是这样)。

示例:

count := m["count"].([]interface{})
value1 := count[0].(int)
value2 := count[1].(int)
英文:

You have to differentiate type and underlying type. Your map is of the type map[string]interface{}. Which means that the value for count is of type interface{}, and its underlying type if []interface{}. So you can't pass the count as a type []interface{}. You have do a type assertion it before using it as an array. Every item will then of type interface{}, which can in turn be asserted as int (as it seem your data is).

Example:

count := m["count"].([]interface{})
value1 := count[0].(int)
value2 := count[1].(int)

huangapple
  • 本文由 发表于 2014年6月18日 01:44:21
  • 转载请务必保留本文链接:https://go.coder-hub.com/24270183.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定