定义
comparable 表示所有可比较类型,也就是说,K 可以是任意可比较类型
标准库定义
type comparable interface{ comparable }
什么意思呢,就是一种可以参与比较的数据类型统称,例如=
!=
我们借助泛型的使用,我们看一下这种写法
// 定义两个泛型方法
// any 类型为传递参数
func genericsAny[T any](uri []T) ([]T, error) {
return uri, nil
}
// comparable 类型为传递参数
func genericsComparable[T comparable](uri []T) ([]T, error) {
return uri, nil
}
调用方法 genericsAny
genericsAny([][]string{{"h", "e"}, {"h", "e"}}) // T类型为 []string
genericsAny([]string{"h", "e"}) // T类型为 string
这两种方法都可以,因为any是万能的
现在我们调用方法 genericsComparable
genericsComparable([]string{"h", "e"}) // T类型为 string
// 注意了,此时会报错
// []string does not satisfy comparable
genericsComparable([][]string{{"h", "e"}, {"h", "e"}}) // T类型为 []string
啥子意思了,comparable 是可比较类型才行,[]string不可比较
泛型可参考文章
https://www.jianshu.com/p/0b711ec80d4b
知识拓展
comparable 定了可比较类型 =
!=
,那么 >
<
时会报错吗?