首页 > 解决方案 > 用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{}

有可能实现吗?

我应该怎么做 ?

标签: gotype-inference

解决方案


发生这种情况是因为[]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

}

推荐阅读