我试图理解,函数中第1和第2个传递参数之间有什么区别。在这两种情况下,方法都是功能性和编译。
1)
generateReport(capacities...)
func generateReport(capacities ...float64) {
for i, cap := range capacities {
fmt.Printf("Plant %d capacity %.0f\n", i, cap)
}
}
2)
generateReport(plantCapacities)
func generateReport(capacities []float64) {
for i, cap := range capacities {
fmt.Printf("Plant %d capacity %.0f\n", i, cap)
}
}
找到了很少的好样本
1)GolangBot - Variadic Function
2)Golang.org - Passing arguments正如@Himanshu所说。
答案 0 :(得分:9)
根据Golang language specification
如果f是可变参数且最终参数p的类型为...... T,则在f内 p的类型等同于[] T的类型。如果用no调用f p的实际参数,传递给p的值是nil。否则, 传递的值是一个带有新底层数组的[] T类型的新切片 其连续元素是实际参数,所有参数都必须是 因此可以分配给切片的长度和容量 绑定到p的参数数量可能因每个呼叫站点而异。
variadic
函数用于处理多个尾随参数。它可以用于传递切片参数。
func main(){
capacities := []float64{1, 2, 3, 4}
generateReport(capacities...)
}
func generateReport(capacities ...float64) {
for i, cap := range capacities {
fmt.Printf("Plant %d capacity %.0f\n", i, cap)
}
}
也可以通过单独的参数以通常的方式调用变量函数。它的工作方式类似于java脚本中的spread运算符,可以使用多个参数。例如: -
func main(){
generateReport(1,2,3,4)
}
func generateReport(capacities ...float64) {
for i, cap := range capacities {
fmt.Printf("Plant %d capacity %.0f\n", i, cap)
}
}