当前位置: > > > > 使用 golang 省略函数参数中的数组类型
来源:stackoverflow
2024-04-21 18:51:37
0浏览
收藏
最近发现不少小伙伴都对Golang很感兴趣,所以今天继续给大家介绍Golang相关的知识,本文《使用 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{}
有可能实现吗?
我该怎么办?
解决方案
发生这种情况是因为 []models.meter
和 []interface{}
是 go 编译器的两种不同类型。
使用 interface{}
通常不是最佳实践。最好定义您自己的类型并使用它。
话虽如此,针对您的情况最快的解决方案应该是使 write
函数成为可变参数函数。就像下面的例子一样。
func write(myarray ...interface{}) (error) { fmt.printf("slice: %v\n", myarray) // insert into db return nil }
如果您先复制到[]接口实例,这是可能的
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) }
今天关于《使用 golang 省略函数参数中的数组类型》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注公众号!