go语言的接口,可以定义返回可变数量返回值的方法吗?

我在抽象数据库的储存过程。程序中有一行要这样写

stmt.Exec(a, b,c,d)

就是把a,b,c,d这4个数据存入数据库,作为一行。

但是,别的数据库一行的个数不一定是4个。
所以,我想抽象出来一个接口

type variableReturner interface{
    Attributes() ...interface{}
}

可是,go语言报错,告诉我,不能有...interface{}这样的返回值。

所以,我想请教一下,go语言,可以定义不定量返回值的办法吗?

麻烦大家啦~~

共 3 个回复


g8c

测试了一下,找到一个变通的方法,那就是

  1. 在接口中把返回值定义成切片
    2.在使用返回值的地方,使用...来解开切片

代码如下。

package main

import(
    "fmt"
)

type variableNumberReturner interface{
    Get() []interface{}
}

func printGet(vng variableNumberReturner){
    fmt.Println(vng.Get()...) //利用`...`来解开切片,就可以了。
}

type oneReturn struct {
    a int
}

func (o oneReturn) Get() []interface{}{
    return []interface{}{o.a}
}

type twoReturn struct{
    a , b int
}

func (t twoReturn) Get() []interface{} {
    return []interface{}{t.a, t.b} 
}


func main(){
    o := oneReturn{a:1}
    printGet(o)

    t := twoReturn{a:1,b:2}
    printGet(t)
}
# 0

coldwater

最好是返回结构体,这样什么都可以存进去

# 1

stevewang

func Attributes() []interface{}

# 2