Go泛型

详细请看: https://blog.zjzaki.com/archives/1691905054612

1.什么是泛型

Go并不是一种静止的, 一成不变的语言. 新的功能是在经过大量的讨论和实验后慢慢采用的

最初的Go 1.0发布依赖, Go语言习惯的模式已经发生了重大变化

1.7的context, 1.11的modules, 1.13error嵌套等

Go的1.18版本包括了类型参数的实现, 也就是俗称的泛型

泛型虽然很受期待, 但实际上推荐的场景也并没有那么广泛

但是我们作为学习者, 一定要了解学会, 遇到了至少不懵逼

package main

import "fmt"

func main() {
	strs := []string{"zzz", "aaa"}

	printArray(strs)
	is := []int{1,2}
	printArray(is)
}


/*
内置的泛型类型any和comparable

-- ** any: 表示go里面所有的内置基本类型, 等价于 `interface{}`
--comparable: 表示go里面所有内置的课比较类型: `int, uint, float, bool, struct, 指针`
 */

func printArray[T string | int](arr []T) {
	for _, a := range arr {
		fmt.Println(a)
	}
}

2.泛型函数

package main

type MySlice
[T int|float64] []T

func (s MySlice[T]) Sum() T {

	var sum T
	for _, v := range s {
		sum += v
	}
	return sum
}

func main() {

	var s MySlice[int] = []int{1, 2, 3, 4}
	fmt.println(s.Sum())
}