Go 参数为任意类型的写法(参数是接口,调用时必须也是接口,而准备参数时可以任意类型)

go里面的接口是万能的参数,因此,参数类型定义为接口就可以了。例如函数:

func SetEndTimeOfDataTypeX(pDatType *[]interface{}) {
	//get the last but one value
	if len(*pDatType) > 1 {
		lastIdx := len(*pDatType) - 2
		curIdx := len(*pDatType) - 1
		lastDat := (*pDatType)[lastIdx]
		curDat := (*pDatType)[curIdx]

		lastVal := lastDat
		curVa2 := curDat

		var lastV2 interface{}
		if reflect.TypeOf(curVa2).String() == "string" {
			curStr := curDat.(string) // time string

			tmpTime, err := time.Parse("2006-01-02 15:04:05", curStr)
			if err == nil { // time format
				tmpTime = tmpTime.Add(-1 * time.Second)
				curStr = tmpTime.Format("2006-01-02 15:04:05")
				lastV2 = curStr
			} else {
				panic(err)
			}
		} else {
			lastV2 = lastVal
		}

		// change the current arry element value
		(*pDatType)[curIdx] = lastV2

		// make the current value to the tail of the array
		*pDatType = append(*pDatType, curVa2)

	}

}

函数参数就可以接受‘’任意”类型吗?其实这个理解并不是任意的。例如如果这么调用上面的函数

 var parm [] string 
 ....
 SetEndTimeOfDataTypeX(&parm)

程序就会报错,错误是:
在这里插入图片描述
大意是这个字符串的数组指针不能作为这个函数的参数云云,可见接口不能接受任意类型。那么传说中的接口接受任意类型难道只是传说吗?当然不是。
这个任意类型其实指的是相当于任意类型,函数定义的参数是接口,那么你必须传入一个接口才可以,而接口在初始化的时候,或者说在准备的时候可以接受任意类型。例如下面的代码编译就不会出问题了
在这里插入图片描述

是记
maraSun BJFWDQ
小轿车检验制度发生重大变革,大意是 6年4年,过10年之后每年检验一次,含15年。之前是15年后,每年检验两次。其实10年之前取消掉就好了,根本没用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值