使用golang忽略函数参数中的数组类型
我正在编写一个write方法,将一个值数组写入XDB 我所希望的是能够拥有如下东西:使用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
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)
}