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
}