登录
首页 >  Golang >  Go问答

在一个案例中不断探索多个选项

来源:stackoverflow

时间:2024-02-28 08:57:22 247浏览 收藏

“纵有疾风来,人生不言弃”,这句话送给正在学习Golang的朋友们,也希望在阅读本文《在一个案例中不断探索多个选项》后,能够真的帮助到大家。我也会在后续的文章中,陆续更新Golang相关的技术文章,有好的建议欢迎大家在评论留言,非常感谢!

问题内容

我有一个接受接口{}的函数,然后我对类型进行 switch、case 操作,如果它是切片,我想迭代元素。我遇到的问题是我在 case 选择器中不能有多个选项,例如我似乎不能有 []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。

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>