package main
import"fmt"// MySumSlice 定义泛型类型type MySumSlice[T string | int | float64 | float32] []T
// MySumSlice 函数调用者泛型化func(s MySumSlice[T]) sum(s1 int) T {
fmt.Printf("Sum s1: %d\n", s1)
var sum T
for _, v := range s {
sum += v
}
return sum
}
// Add 参数泛型化funcAdd[Tstring | int | float64 | float32](a T, b T) T {
return a + b
}
funcmain() {
/*
泛型函数
- 1 调用者不同,传入泛型类型。
- 2.普通函数,即:参数泛型化
*/// 1. 调用者不同。 引入泛型化的数据类型调用函数var intSlice MySumSlice[int] = []int{1, 2, 3, 4, 5}
intRes := intSlice.sum(1235456)
fmt.Println("intRes:", intRes)
var float32Slice MySumSlice[float32] = []float32{1.2, 2.2, 3, 4, 5}
float32Res := float32Slice.sum(222)
fmt.Println("float32Res:", float32Res)
// 2. 函数参数泛型化,同类型参数支持自动推到 ADD(int,int)var ia int = 1var ib int = 1
addRes1 := Add[int](ia, ib)
fmt.Println("addRes1:", addRes1)
var fa float32 = 12.33var fb float32 = 1.235// 遵循四舍五入
addRes2 := Add[float32](fa, fb)
fmt.Println("addRes2:", addRes2)
var sa string = "abc"var sb string = "xyz"
addRes3 := Add[string](sa, sb)
fmt.Println("addRes3:", addRes3)
}
自定义泛型
package main
import"fmt"type genericsInterface interface {
string | int | float64 | float32 | int8 | int16 | int32
}
funcgetMax[TgenericsInterface](a, b T) T {
if a > b {
return a
}
return b
}
funcmain() {
/* 自定义泛型 */var a = 10var b = 20
fmt.Println(getMax(a, b))
var c = "10"var d = "20"
fmt.Println(getMax(c, d))
}
内置泛型
package main
import"fmt"// int8 衍生类型type int8AT int8// int8AT 就是 int8 的衍生类型type int8BT int8// intB 就是 int8 的衍生类型// MyGenerics01 自定义 泛型类型 接口. ~表示可以匹配该类型的衍生类型type MyGenerics01 interface {
~int8
}
funccompareTheSize[TMyGenerics01](a, b T) T {
if a > b {
return a
}
return b
}
funcmain() {
/*
内置泛型
- any 就是一个泛型,内置类型。interface{}
- comparable 表示比较所有的类型
- 新符号 (~)衍生类型
*/// ~ 新符号使用var a1 int8AT = 3var b1 int8AT = 5
fmt.Println(a1, b1)
fmt.Printf("%T\n", a1) // main.int8AT
fmt.Printf("%T\n", b1) // main.int8BT//fmt.Println(compareTheSize(a1, b1))
fmt.Println(compareTheSize(b1, a1))
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?