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

我正在编写一个 write 方法,将值数组写入 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{}

有可能实现吗?


我应该怎么做 ?


慕斯王
浏览 136回答 2
2回答

繁华开满天机

发生这种情况是因为[]models.Meter和[]interface{}对于 Go 编译器来说是两种不同的类型。使用interface{}通常不是最佳实践。最好定义自己的类型并使用它。话虽如此,针对您的情况最快的解决方案应该是使Write函数成为可变函数。就像下面的例子一样。https://play.golang.org/p/KzzFMAjQvRafunc Write(myArray ...interface{}) (error) {    fmt.Printf("Slice: %v\n", myArray)    // Insert into DB    return nil}

LEATH

如果您先复制到 [] 接口实例,这是可能的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)}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go