golang可变函数参数

golang的可变函数参数func func_name(args …interface{})这样定义是,在传入函数体内不是args是一个array类型的数组,相应的在调用func_name函数的时候可以将一个数组直接传入func_name,那么作为可变函数参数如果只是将一个数组传给func_name那么就会被最为一个参数,如果想将这个数组内部各个元素分别作为参数传给func_name的话,那么可以使用func_name(array_var…)这种方式调用:)

今天在使用过程中发现,当存在一个s=[]string类型的时候不能通过func_name(s…)这种方式调用,因为这种调用方法相当于是将s赋值给args参数,而这种赋值方式在golang里面是不允许的,只能通过一个一个赋值的方法将其他数据类型赋值给interface类型,原因是内存分部不同导致的,参考文档

Can I convert a []T to an []interface{}?

Not directly, because they do not have the same representation in memory. It is necessary to copy the elements individually to the destination slice. This example converts a slice of int to a slice of interface{}:

t := []int{1, 2, 3, 4}
s := make([]interface{}, len(t))
for i, v := range t {
    s[i] = v
}

转载请注明来源链接 http://just4fun.im/2017/01/03/golang-e5-8f-af-e5-8f-98-e5-87-bd-e6-95-b0-e5-8f-82-e6-95-b0/ 尊重知识,谢谢:)