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

使用golang忽略函数参数中的数组类型,go,type-inference,Go,Type Inference,我正在编写一个write方法,将一个值数组写入XDB 我所希望的是能够拥有如下东西: func (influxClient *InfluxClient) Write(myArray []interface{}) (error) { fmt.Print(myArray) // Insert into DB return nil } 其中myArray可以是包含任何对象的数组 我试图使用myArray[]接口{}来管理myArray的类型,但它不起作用,我得到: Cann

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

我所希望的是能够拥有如下东西:

func (influxClient *InfluxClient) Write(myArray []interface{}) (error) {
    fmt.Print(myArray)
    // Insert into DB
    return nil

}
其中
myArray
可以是包含任何对象的数组

我试图使用
myArray[]接口{}
来管理myArray的类型,但它不起作用,我得到:

Cannot use 'meters' (type []models.Meter) as type []interface{}
有可能实现吗


我该怎么做?

这种情况发生是因为对于Go编译器来说,
[]models.Meter
[]interface{}
是两种不同的类型

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

话虽如此,对于您的情况,最快的解决方案应该是将
Write
函数设置为可变函数。就像下面的例子


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

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


如果您试图将某个部分格式化为一个接口部分,您可能需要看一看是的,我将有一个“对象”数组,所以。。。这可能不是最合适的方法。您是说在调用
Write
方法之前已经构建了对象的切片吗?在这种情况下,您只需要像这样调用它:
Write(mySlice…
)。是的,我的输入是在一片对象中。对象类型可能会有所不同。我会检查这是否有效
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)
}