Golang泛型的实现可以通过类型参数、接口两种方式实现:
1、类型参数:
类型参数是用 interface{} 作为函数的参数,然后将函数的参数强制转换为需要的类型,使用这种方式实现泛型,可以方便高效地创建一个可用来处理各种类型数据的通用函数:
func MyFunc(data interface{}) {
t := reflect.TypeOf(data)
if t == reflect.typeOf(int) {
// ...
} else if t == reflect.typeOf(string) {
// ...
}
// ...
}
2、接口:
接口可以定义函数列表,因此可以将一组数据作为函数参数进行传递,这样,函数中就可以针对不同的类型进行不同的处理:
type foo interface {
DoSomething() error
}
func MyFunc(data foo) {
// do something here
}