第11节 Go语言特性代码展示与新特性泛型
❤️💕💕Go语言高级篇章,在此之前建议您先了解基础和进阶篇。Myblog:http://nsddd.top
Go语言基础篇
Go语言100篇进阶
[TOC]
Go18
go 1.18 的正式版(go version go1.18 windows/amd64 ),今天我们就GO的新特性:泛型 进行简单的尝鲜使用。 GO 中泛型涉及到两个关键词:类型参数、类型约束
值、引用、指针
泛型和约束
GO 中泛型的语法
以下示例中 [] 类型参数type0、type2,其中type0受可比较类型约束 ,type1 受 int64 或 float64 类型约束。
func funcName[type0 comparable, type1 int64 | float64](arg0 type0, arg1 type1) {}
该函数内部打印每个参数的类型和值
func main() {
funcName("arg0", 1)
funcName("arg0", 3.5)
}
func funcName[type0 comparable, type1 int | float64](arg0 type0, arg1 type1) {
fmt.Printf("arg0 type: %T value: %v\t", arg0, arg0)
fmt.Printf("arg1 type: %T value: %v\n", arg1, arg1)
}
结果:
arg0 type: string value: arg0 arg1 type: int value: 1
arg0 type: string value: arg0 arg1 type: float64 value: 3.5
Go泛型 若存在违反泛型函数中的类型约束,能够在编译时捕获
我们尝试给funcName
函数的第二个参数传如string
字面量
func main(){
funcName("arg0", "string")
}
编译结果:
command-line-arguments
.\test_1.go:9:10: string does not implement int|float64
指定类型参数调用
指定类型参数-在方括号内的类型名称-来明确你所调用的函数中应该用哪些类型来替代类型参数
func main(){
funcName[string, int]("arg0", 4)
}
通过interfac进行类型约束
类型约束可以通过interface
进行绑定
声明一个Number interface类型作为类型限制 在interface
内声明int64
和float64
的合集
type Number interface {
float64 | int
修改实例函数 arg1 类型参数的类型约束为接口 Number
func main() {
funcName("arg0", 1)
funcName("arg0", 3.5)
}
func funcName[type0 comparable, type1 Number](arg0 type0, arg1 type1) {
fmt.Printf("arg0 type: %T value: %v\t", arg0, arg0)
fmt.Printf("arg1 type: %T value: %v\n", arg1, arg1)
}
执行结果
arg0 type: string value: arg0 arg1 type: int value: 1
arg0 type: string value: arg0 arg1 type: float64 value: 3.5