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

}

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值