我试图理解,函数中第1和第2次传递参数之间有什么区别.在这两种情况下,方法都是功能性和编译.
1)
generateReport(capacities...)
func generateReport(capacities ...float64) {
for i, cap := range capacities {
fmt.Printf("Plant %d capacity %.0f\n", i, cap)
}
}
Run Code Online (Sandbox Code Playgroud)
2)
generateReport(plantCapacities)
func generateReport(capacities []float64) {
for i, cap := range capacities {
fmt.Printf("Plant %d capacity %.0f\n", i, cap)
}
}
Run Code Online (Sandbox Code Playgroud)
找到了很少的好样品
2)Golang.org -以@Himanshu提到的方式传递论据.
Him*_*shu 10
如果f是具有类型... T的最终参数p的可变参数,那么在f中p的类型等同于类型[] T. 如果在没有p的实际参数的情况下调用f,则传递给p的值为nil.否则,传递的值是类型为[] T的新切片,其中包含一个新的基础数组,其连续元素是实际参数,所有参数都必须可分配给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)
}
}
Run Code Online (Sandbox Code Playgroud)
变量函数也可以通过单独的参数以通常的方式调用.它的工作方式类似于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)
}
}
Run Code Online (Sandbox Code Playgroud)