我是Go的新手,还有一些我还没有实现的潜力
例如,我有一个可以这样调用的函数:
myVar.InitOperation("foo",Operator.EQUAL,"bar")
myVar.InitOperation("foo",Operator.INCLUDE,[]interface{}{"baz",1,"boo"})
myVar.InitOperation("foo",Operator.GREATER_THAN,1)
所以我将此函数声明为:
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
}
问题是,当我传递一个字符串或一个整数时,它会很顺利,但是当我传递一个数组时,它会被解析为一个元素。
在我的函数doSomethingElse
中,我试图迭代values
,正如您可能猜到的,我有一个错误。
很好,我只是将values
设为[]interface{}
而不是interface{}
。在这里,一切顺利,但是当我调用doSomething
时,它被解析为[[myValue]]
这是合乎逻辑的,但不是我期望的。
我的问题是,有没有办法传递一个[]interface{}
或interface{}
谁可以是红色作为值或一组值的情况?
谢谢!
答案 0 :(得分:2)
你需要一个类型断言:
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)
}
}