本节重点:

  • 学会Go泛型的基本使用

Go 1.18 版本正式支持泛型,本节主要介绍Go泛型的基础知识。

什么是泛型

在编程语言中,泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。

在保证与Go 1完全兼容的情况下,为类型及函数声明增加可选的类型参数(Type Parameters)来扩展支持泛型函数和类型。

类型参数使用接口类型(Interface Types)进行约束(Constraint),并允许在接口类型中内嵌附加元素来指定约束的类型集合。

可以通过显式指定类型实参,来实例化泛型类型和函数。为了简洁性,类型推断机制可以在大多数场景下减少甚至忽略泛型实例化时指定的类型实参个数。

泛型的基本使用

在没有泛型时,我们写一个函数接收一个 int 类型并返回 int 类型:

package main

import "fmt"

func rInt(a int) int {
	return a
}

func main() {
	c := rInt(1)
	fmt.Printf("%v", c)
}

参数 a ,返回值类型也是 int,结果出 a。
这时需求更改了,我们需要改成 string 类型。怎么办?大概率我们得新增一个函数来实现:

func rString(a string) string {
	return a
}

会造成大量重复代码。