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年之前取消掉就好了,根本没用。