编写一个返回Golang接口片的函数

时间:2015-07-27 19:02:07

标签: sql go

在Golang中,Scanner接口采用单个dest参数,该参数是任意数量的interface{} s:

// Scan copies the columns in the current row into the values pointed at by dest.
func (rs *Rows) Scan(dest ...interface{}) error

是否有一个替代函数可以返回一片接口作为结果?假设我想将dest参数放在一个函数中,所以我不必每次都写出来。

func scanArgs() []interface{} {

}

func main() {
    db.QueryRow("SELECT * FROM users").Scan(scanArgs()...)
}

我已经尝试了这个但是我遇到了方法签名的问题;我可以设置[]interface作为返回值,但我无法在函数内轻松创建一个。{1}}。有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

您可以使用以下语法轻松地在函数内部进行分配;

package main

import "fmt"

func main() {
        objs := &[]interface{}{} 
        objs2 := make([]interface{}, 10)
        objs3 := []interface{}{}
    fmt.Println(len(*objs))
    fmt.Println(len(objs2))
    fmt.Println(len(objs3))
}

由于所有内容都实现了空接口,因此您可以使用append向这些集合添加任何类型。 init语法有点笨拙,可能是什么让你失望......它看起来像是因为我在那里声明类型interface{},通常你有一个实际的名字< / em>接口,如[]io.Writer{}。相反,你需要那些提取卷曲。