golang 函数传参打包解包 不定长参数 ...
package main import ( "fmt" "reflect" ) func main() { str := "X" iSlice := []interface{}(nil) strSlice := []string{"Y", "X", "C"} for _, v := range strSlice{ iSlice = append(iSlice, v) } if IN(str, iSlice...) { fmt.Println("Yes, IN it!") } } func IN(arg interface{}, args ...interface{}) bool { argType := reflect.TypeOf(arg) for index, value := range args { if reflect.TypeOf(value) == argType && value == arg { fmt.Println("Position", index, "Equal arg!") return true } } return false }
上面的代码意思是创建函数IN,用于判断首个元素是否在某个可迭代类型中,这里采用不定长传参的方式,Go语言提供了这种传参方式,使用方法就是在参数名后,参数类型前加三个点“.”,即表示该参数代表后面的许多不确定个数的参数集合,如果要使用该函数,除了一个个传入外,也可以传入一个切片,在切片后添加三个点,既可以拆开传入。