duanliao3826 2014-10-28 14:08
浏览 76
已采纳

将参数设置为接口或接口列表

I'm pretty new to Go and there are some subtilities that I don't get yet

For instance, I have a function who may be called like this :

myVar.InitOperation("foo",Operator.EQUAL,"bar")
myVar.InitOperation("foo",Operator.INCLUDE,[]interface{}{"baz",1,"boo"})
myVar.InitOperation("foo",Operator.GREATER_THAN,1)

So I declared this function as :

func InitOperation(attr string, operator Operator, value interface{}){
    if operator.String() == "BAR"{
        doSomething(attr,operator,value)
    } else if (operator.String() == "INCLUDE" {
        doSomethingElse(attr,operator,value)
    }
    // And so on regarding to the case
}

The thing is that when I pass a string or an integer, it goes well but when I pass an array, it is parsed as a single element.

In my function doSomethingElse, I'm trying to iterate over values, and as you may guess, I have an error.

Fine, I'll just set values as []interface{} and not interface{}. Here, everything goes well but when I'm calling doSomething, it is parsed as [[myValue]] which is logical but not what I expect.

My question is, is there a way to pass either an []interface{} or interface{} who can be red as a value or an array of values regarding to the case ?

Thanks !

  • 写回答

1条回答 默认 最新

  • duanqilupinf67040 2014-10-28 14:20
    关注

    You need a type assertion:

    func InitOperation(attr string, operator Operator, value interface{}){
        if operator.String() == "BAR"{
            doSomething(attr,operator,value)
        } else if (operator.String() == "INCLUDE" {
            doSomethingElse(attr, operator, value.([]interface{}))
        }
        // And so on regarding to the case
    }
    
    func doSomethingElse(attr string, operator Operator, value []interface{}) {
        for _, v := range value {
            fmt.Println(v)
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥17 pro*C预编译“闪回查询”报错SCN不能识别
  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向