一、泛型输出

下面的例子是一个对泛型输出的基本例子。

函数可以有一个额外的类型参数列表,它使用方括号,但看起来像一个普通的参数列表:func F(p T) { … },代码中的T any即为类型参数,意思是该函数支持任何T类型,当我们调用printSlicestring时,会被类型推导为string类型,不过在编译器完全可以实现类型推导时,也可以省略显式类型,如:printSlice([]string{“Hello”,“World”}) ,这样也将会是对的;

测试代码

  [go]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package main import ( "fmt" ) func printSlice[T any](s []T) { for _, v := range s { fmt.Printf("%v ", v) } fmt.Print("\n") } func main() { printSlice[int]([]int{1, 2, 3, 4, 5}) printSlice[float64]([]float64{1.01, 2.02, 3.03, 4.04, 5.05}) printSlice([]string{"Hello", "World"}) printSlice[int64]([]int64{5, 4, 3, 2, 1}) }

运行测试

  [plaintext]
1
2
3
4
5
$ go run main.go 1 2 3 4 5 1.01 2.02 3.03 4.04 5.05 Hello World 5 4 3 2 1

参考资料

https://go.dev/doc/tutorial/generics

期待已久的golang泛型入门

https://juejin.cn/post/7042949225138782244

https://zhuanlan.zhihu.com/p/572436779