go语言也支持可变参数,使用形式:func 函数名(参数名...类型) 返回值 {},跟正常其他函数声明不同的是,在参数名和类型中间加了...符号。当需要传递的是不定类型和任意类型时,可以用interface{}代替,类似于c语言中的void *
下面这个例子演示了可变参数的使用,传递的是interface{}任意类型,并通过switch case语句,对可变参数里的每一个元素使用.(type)函数来判断具体类型,进行各自处理。
package main
import (
"fmt"
)
//func myfunc(args...int) //这样就是int类型的可变参数,
//func myfunc(args...string) //这样就是string类型的可变参数,
func myfunc(args...interface{}) string {//用 interface{} 传递任意类型数据是Go语言的惯例用法,类似于void *
tstr,str:="",""
for _, arg := range args {
// 对arg进行类型断言
switch arg.(type) { //.(type)是判断interface{}的具体类型,只能在switch case语句中使用。
case int:
//使用 fmt.Sprintf格式化函数配合%v,可以将 interface{} 格式的任意值转为字符串。
tstr=fmt.Sprintf("这是int %v\n",arg)
case float64:
tstr=fmt.Sprintf("这是float64 %v\n",arg)
case bool:
tstr=fmt.Sprintf("这是bool %v\n",arg)
case string:
tstr=fmt.Sprintf("这是string %v\n",arg)
default:
tstr=fmt.Sprintf("其他 %v\n",arg)
}
str+=tstr//累加到str
}
return str
}
func main() {
fmt.Println(myfunc(1, 3, true,"abc", 13.5,[3]int{1,2}))
}