登录
首页 >  Golang >  Go问答

使用 golang 省略函数参数中的数组类型

来源:stackoverflow

时间:2024-04-21 18:51:37 221浏览 收藏

最近发现不少小伙伴都对Golang很感兴趣,所以今天继续给大家介绍Golang相关的知识,本文《使用 golang 省略函数参数中的数组类型》主要内容涉及到等等知识点,希望能帮到你!当然如果阅读本文时存在不同想法,可以在评论中表达,但是请勿使用过激的措辞~

问题内容

我正在编写一个写入方法,将值数组写入 influxdb

我想要的是能够拥有类似的东西:

func (influxclient *influxclient) write(myarray []interface{}) (error) {
    fmt.print(myarray)
    // insert into db
    return nil

}

其中 myarray 可以是内部包含任何对象的数组

我尝试使用 myarray []interface{} 来省略 myarray 的类型,但它不起作用,我得到:

Cannot use 'meters' (type []models.Meter) as type []interface{}

有可能实现吗?

我该怎么办?


解决方案


发生这种情况是因为 []models.meter[]interface{} 是 go 编译器的两种不同类型。

使用 interface{} 通常不是最佳实践。最好定义您自己的类型并使用它。

话虽如此,针对您的情况最快的解决方案应该是使 write 函数成为可变参数函数。就像下面的例子一样。

https://play.golang.org/p/KzzFMAjQvRa

func write(myarray ...interface{}) (error) {
    fmt.printf("slice: %v\n", myarray)
    // insert into db
    return nil

}

如果您先复制到[]接口实例,这是可能的

func main() {

   // Copy from your explicit type array
   var interfaceSlice []interface{} = make([]interface{}, len(models.Meter))

   for i, Modelvalue := range models.Meter {
       interfaceSlice[i] = Modelvalue
   }    

   influxClient.Write(interfaceSlice)
}

Wiki Interface slice and arrays

Playground sample

今天关于《使用 golang 省略函数参数中的数组类型》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>