编辑
2024-05-31
🧰语言-go
00
请注意,本文编写于 384 天前,最后修改于 225 天前,其中某些信息可能已经过时。

目录

语法
代码演示
求和
求最大值、最小值
过滤和查找
在切片特定索引位置插入元素

语法

右边是一个泛型接口,其中类型参数T可以是任务类型

image.png

结构体也可以使用泛型

go
type LinedListV1[T any] struct { head *nodeV1[T] } func (l *LinkedListV1[T]) Add (idx int, val T) { //TODO implement me panic("implement me") } func (l *LinkedListV1[T]) Append(val T){ //TODO implement me panic("implement me") } func (l *LinkedListV1[T]) Delete(idx T){ //TODO implement me panic("implement me ") } type NodeV1[T any] struct { data T } func UseList(){ l := &LinkedListV1[int]{} l.Add(index: 1, val:123) l.Add(index: 1, val:"123") //这里会报错 }

方法也可以用泛型

go
package generics func Sum[T Number](vals []T) T{ var res T for _,v :=range vals{ res = res + v // 若sum用的是Any,就不能相加,因为数据类型可能是非数字,所以该用Number来检查 } return res } type Integer int type Number interface { int | unint // 或者int的衍生类型 ~int | unint } func UseSum(){ // 必须使用衍生类型的int res:=Sum[int]([]int{123, 123}) println(res) resV1 := Sum[Integer]([]Integer{123,123}) println(res) } func Closable[T io.Closer](){ var t T t.Close() }

代码演示

标准实现参考

求和

求最大值、最小值

go
func Max[T Number](vals []T) T{ t:=vals[0] for i :=1; i< len(vals);i++ { if t <vals[i]{ t=vals[i] } } return t } func Min[T Number](vals []T) T{ t:=vals[0] for i :=1; i< len(vals);i++ { if t >vals[i]{ t=vals[i] } } return t }

过滤和查找

go
func Find[T any](vals []T, filter func(t T)bool) T{ for _,v :=range vals{ if filter(v) { return v } } var t T return t }

在切片特定索引位置插入元素

go
func Insert[T any](ids int, vals []int) { if idx <0 || idx >= len(vals) { panic("idx 不合法") } //先扩容 vas = append(vals, val) for i:=len(vals)-1; i>idx; i-- { if i-1>=0{ vals[i]=vals[i-1] } } vals[idx] = val return vals } //调用使用 package main import "fmt" func main(){ fmt.Printf("%v \n", Insert[int](0, 12, []int{1,2})) fmt.Printf("%v \n", Insert[int](2, 12, []int{1,2})) fmt.Printf("%v \n", Insert[int](1, 12, []int{1,2})) }

本文作者:Eric

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!