GoLang教程——泛型编程入门
大家好,我是极客老墨。 Go 1.18 之前,写一个通用的 Min 函数很麻烦。想支持 int 和 float64?要么写两遍代码,要么用 interface{} 加反射,性能还差。其他语言早就有泛型了,Go 终于在 1.18 补上了这个短板。 这篇就聊聊 Go 的泛型,看看它是怎么让代码更通用、更安全的。 为什么需要泛型 没有泛型时,写通用代码很痛苦。 问题:重复代码 1// 比较两个 int 2func MinInt(a, b int) int { 3 if a < b { 4 return a 5 } 6 return b 7} 8 9// 比较两个 float64(重复代码) 10func MinFloat64(a, b float64) float64 { 11 if a < b { 12 return a 13 } 14 return b 15} 16 17// 比较两个 string(又是重复) 18func MinString(a, b string) string { 19 if a < b { 20 return a 21 } 22 return b 23} 问题:interface{} 不安全 1// 使用 interface{} 可以接受任何类型 2func Min(a, b interface{}) interface{} { 3 // 需要类型断言,容易出错 4 // 而且失去了类型安全 5} 解决方案:泛型 1// 一个函数支持多种类型 2func Min[T int | float64 | string](a, b T) T { 3 if a < b { 4 return a 5 } 6 return b 7} 泛型函数 泛型函数使用类型参数,可以处理多种类型。 ...