go可变参数

先看一个例子:

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")
}

你可能感兴趣的:(go,golang,开发语言)