gpt4 book ai didi

interface - 将参数设置为接口(interface)或接口(interface)列表

转载 作者:IT王子 更新时间:2023-10-29 01:11:09 25 4
gpt4 key购买 nike

我是 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{}关于这个案子?

谢谢!

最佳答案

你需要一个类型断言:

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)
}
}

关于interface - 将参数设置为接口(interface)或接口(interface)列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26610436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com