先看一个例子:
package main
import (
"fmt"
)
func changeParams(x1 int, x2 [4]string) {
fmt.Println(x2)
fmt.Println("x1=", x1)
}
func main() {
testls := []string{"A", "B", "C", "D"}
changeParams(16, testls)
}
#[A B C D]
#x1= 16
数组作为函数入参,如果入参和传参的数组大小不一致,
testls := []string{"A", "B", "C", "D"}
则会报错:
Cannot use ‘testls’ (type []string) as the type [4]string
此时可以考虑使用可变传参:
在可变参数函数的声明中,最后一个参数的类型前面带有省略号,即(…)。它表明该函数可以调用任意数量的这种类型的参数
当在可变参数函数中不传递任何参数时,函数内部的默认为nil
可变参数函数通常用于字符串格式化
还可以在可变参数函数中传递多个切片
不能将可变参数用作返回值,但可以将其作为切片返回
package main
import (
"fmt"
"strings"
)
func changeParams(x1 int, x2 ...string) {
fmt.Println(strings.Join(x2, "-"))
fmt.Println("x1=", x1)
}
func main() {
testls := []string{"A", "B", "C", "D"}
changeParams(16, testls...)
}
#A-B-C-D
#x1= 16
和直接使用多个参数是一样的:
package main
import (
"fmt"
"strings"
)
func changeParams(x1 int, x2 ...string) {
fmt.Println(strings.Join(x2, "-"))
fmt.Println("x1=", x1)
}
func main() {
changeParams(16, "A", "B", "C", "D")
}