了解Golang的仿制药
#编程 #go #cloudnative

仿制药是GO编程语言中的一个强大功能,可让您编写可以与多种类型一起使用的代码。这对于创建可以在不同上下文中使用的可重复使用的组件很有用,而无需为每种类型编写单独的代码。

要在GO中使用Generics,您首先需要通过在函数,类型或您想要为通用的函数,类型或方法的名称之后指定字母T来定义类型参数。例如:

func mapValues<T>(m map[string]T) []T {
    values := make([]T, 0, len(m))
    for _, v := range m {
        values = append(values, v)
    }
    return values
}


在此示例中,mapValues函数与T型相比是通用的,这意味着它可以与具有任何类型值的地图一起使用。

要使用MapValues函数,您可以像其他任何功能一样调用它,但是您需要指定要用于T的类型。您可以使用类型的关键字来执行此操作。在角度支架内使用。例如:


values := mapValues<int>(map[string]int{"a": 1, "b": 2, "c": 3})


在这种情况下,MAPVALUES函数与具有INT类型值的映射调用,因此T将被推断为在函数内。结果值切片将是int值的切片。

您还可以通过在类型名称之后在角度括号内定义类型参数来使用仿制药。例如:


type Pair<T, U> struct {
    first  T
    second U
}


这定义了一个对两种类型的TU的通用结构。要创建配对实例,您需要指定要在角括号内用于TU的类型。例如:

p := Pair<string, int>{"hello", 123}

这将创建一个具有类型字符串字段的Pair实例和一个类型的second字段int。

仿制药也可以与方法一起使用。要定义通用方法,您可以在func关键字之后和方法名称之前指定角度括号内的类型参数。例如:


func (p Pair<T, U>) String() string {
    return fmt.Sprintf("%v, %v", p.first, p.second)
}

这为Pair类型定义了String方法,该方法在相同两种类型的TU上是通用的。可以在任何Pair实例上调用此方法,并且在创建实例时将使用用于TU的类型将在方法中使用。

总而言之,GO中的仿制药允许您编写可以与多种类型一起使用的代码,而无需为每种类型编写单独的代码。这可以使您的代码更加重复使用和通用,并可以帮助您编写更有效和可维护的代码。