【问题标题】:Having multiple options in a case and then a loop within the case go在一个案例中有多个选项,然后在案例中进行一个循环
【发布时间】:2020-09-12 13:16:31
【问题描述】:

我有一个接受接口的函数{} 然后我在类型上做一个开关,大小写,如果它是一个切片,我想遍历元素。我遇到的问题是我在案例选择器中不能有多个选项,例如我似乎不能有 []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
     }
    }
}

但我收到一条错误消息,提示我无法迭代接口。

【问题讨论】:

    标签: go


    【解决方案1】:

    在类型切换中,如果存在单一类型案例,则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。

    【讨论】:

    • 我最终写了 2 个循环,希望我能拥有一个 :(。无论如何谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-09
    • 2016-10-09
    • 2020-04-04
    • 2021-01-27
    • 1970-01-01
    • 2021-11-10
    相关资源
    最近更新 更多