程序开发 · 2025年7月7日

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

当前位置: > > > > 使用 golang 省略函数参数中的数组类型

来源:stackoverflow
2024-04-21 18:51:37
0浏览
收藏

最近发现不少小伙伴都对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 函数成为可变参数函数。就像下面的例子一样。

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

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