我有一个接受接口的函数{},然后对类型进行大小写转换,如果是切片,我要遍历元素。我遇到的问题是,案例选择器中不能有多个选项,例如,我似乎没有[] int,[] float32,然后对值进行范围调整。
我想做的是这样的
func digestCollection(obj interface{}) ([]byte, error) {
switch v := obj.(type) {
case []int64, []float64:
for _, values := range v {
// do something with v whether its an int or float
}
}
}
但是我收到一个错误消息,说我无法通过接口进行迭代。
在类型开关中,如果存在单个类型的情况,则v
属于该类型:
switch v:=obj.(type) {
case []int64:
// Here, v is []int64
case []float64:
// here, v is []float64
}
但是,如果有多种情况,或者它是默认情况,则v
类型为obj
:
switch v:=obj.(type) {
case []int64,[]float64:
// Here, type of v is type of obj
因为v
如果它是int数组或float64数组,则不能具有确定的类型。为两者生成的代码将不同。
您可以尝试使用反射来遍历数组,或者编写两个循环,一个循环用于int,一个循环用于float64。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句