我正在編寫一個 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{}有可能實現嗎?我應該怎么做 ?
2 回答

繁華開滿天機
TA貢獻1816條經驗 獲得超4個贊
發生這種情況是因為[]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
}

LEATH
TA貢獻1936條經驗 獲得超7個贊
如果您先復制到 [] 接口實例,這是可能的
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)
}
- 2 回答
- 0 關注
- 173 瀏覽
添加回答
舉報
0/150
提交
取消