go语言可变参数和interface{}使用

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

}

go语言可变参数和interface{}使用_第1张图片

你可能感兴趣的:(go)