为了账号安全,请及时绑定邮箱和手机立即绑定

如何在golang中声明一个函数接受一个接口数组?

如何在golang中声明一个函数接受一个接口数组?

Go
翻翻过去那场雪 2021-11-22 19:38:27
我想声明一个函数接受接口数组,例如:func (this *CvStoreServiceImpl) setItemList(coll *mgo.Collection, itemList ...interface{}) (err error)然而,当我像下面这样调用这个函数时失败了:jobList := cvRaw.GetJobList() this.setItemList(jobColl, jobList...)这是错误:cannot use cvRaw.GetJobList() (type []*cv_type.CvJobItemRaw) as type []interface {} in argument to this.setItemList
查看完整描述

2 回答

?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

这个问题正确地声明了setItemList方法,假设你想要一个可变参数。由于该setList函数适用于任何 Mongo 文档类型,因此适合interface{}在此场景中使用。


A[]*cv_type.CvJobItemRaw不能转换为 a []interface{}。编写一个循环来创建[]interface{}from jobList。


jobList := cvRaw.GetJobList()

s := make([]interface{}, len(t))

for i, v := range t {

    s[i] = v

}

this.setItemList(jobColl, s...)

有关更多详细信息,请参阅Go 语言常见问题解答。


查看完整回答
反对 回复 2021-11-22
?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

我想你要找的是这个


package main


import "fmt"


func main() {

    interfacetious := []interface{}{"s", 123, float64(999)}

    stuff(interfacetious)

    stuff2(interfacetious...)


    stuff2("or", 123, "separate", float64(99), "values")

}


// Stuff can only work with slice of things

func stuff(s []interface{}) {

    fmt.Println(s)

}


// Stuff2 is polyvaridc and can handle individual vars, or a slice with ...

func stuff2(s ...interface{}) {

    fmt.Println(s)

}


查看完整回答
反对 回复 2021-11-22
  • 2 回答
  • 0 关注
  • 294 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信