我正在尝试处理从mongodb(mgo)检索到的某些数据。
不幸的是,我无法断言字符串列表的正确类型。我正在使用的功能如下:
func generate_version_histogram(userStats []interface{}) map[string]int {
var histogram map[string]int
for _, _u := range userStats {
u := _u.(bson.M)
for _, version := range (u["v"]).([]string) {
if _, alreadyhere := histogram[version]; alreadyhere {
histogram[version] += 1
} else {
histogram[version] = 1
}
}
}
return histogram
}
不幸的是,我在运行时出现了以下紧急情况:
interface conversion: interface is []interface {}, not []string
知道为什么会这样吗?如何检索这些字符串?
这是Go的常见错误。
原因如下:在Go []interface{}
中,不是接口,而是切片类型,其元素均为该interface{}
类型。
因为每个元素都是一个interface{}
,而不是一个int
或Foo
,所以每个元素占用更多的内存(interface{}
需要存储基础类型和所包含的值)。因此,不可能将一个[]interface
值直接转换为a []string
或[]T
value。
那你怎么转换[]interface{}
成[]string
呢?
解决方案非常简单-转换每个元素。
package main
import "fmt"
func main() {
foo := []interface{}{"a", "b", "c"}
// we want to convert foo to a []string
out := []string{}
for _, v := range foo {
// using a type assertion, convert v to a string
out = append(out, v.(string))
}
fmt.Println(out)
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句