go语言实现泛型了吗 go语言chan( 三 )


type MyObject struct {
X
int
}
var sink MyObjectfunc BenchmarkGo1(b *testing.B) {
for i := 0; ib.N; i++ {
var s Stack
s.Push(MyObject{})
s.Push(MyObject{})
s.Pop()
sink = s.Peek().(MyObject)
}
}
func BenchmarkGo2(b *testing.B) {
for i := 0; ib.N; i++ {
var s Stack(MyObject)
s.Push(MyObject{})
s.Push(MyObject{})
s.Pop()
sink = s.Peek()
}
}
结果:
BenchmarkGo1BenchmarkGo1-161283752887.0 ns/op48 B/op2 allocs/opBenchmarkGo2BenchmarkGo2-162840647941.9 ns/op24 B/op2 allocs/op
在这种情况下,我们分配更少的内存,同时泛型的速度是非泛型的两倍 。
合约(Contracts)
上面的堆栈示例适用于任何类型 。但是,在许多情况下,你需要编写仅适用于具有某些特征的类型的代码 。例如,你可能希望堆栈要求类型实现 String() 函数
GO语言(十五):泛型入门(下)-在本节中,您将添加通用函数调用的修改版本,进行小的更改以简化调用代码 。您将删除在这种情况下不需要的类型参数 。
当 Go 编译器可以推断您要使用的类型时 , 您可以在调用代码中省略类型参数 。编译器从函数参数的类型推断类型参数 。
请注意 , 这并不总是可能的 。例如,如果您需要调用没有参数的泛型函数 , 则需要在函数调用中包含类型参数 。
在 main.go 中,在您已有的代码下方,粘贴以下代码 。
在此代码中:
(1)调用泛型函数,省略类型参数 。
从包含 main.go 的目录中的命令行 , 运行代码 。
接下来,您将通过将整数和浮点数的并集捕获到您可以重用的类型约束(例如从其他代码中)来进一步简化函数 。
正如您将在本节中看到的,约束接口也可以引用特定类型 。
1、编写代码
在此代码中:
b.在您已有的函数下方,粘贴以下通用 SumNumbers函数 。
在此代码中:
c.在 main.go 中,在您已有的代码下方,粘贴以下代码 。
在此代码中:
(1)调用SumNumbers打印每个map的总和 。
与上一节一样,在调用泛型函数时省略了类型参数(方括号中的类型名称) 。Go 编译器可以从其他参数推断类型参数 。
从包含 main.go 的目录中的命令行 , 运行代码 。
做得很好!您刚刚学习了 Go 中的泛型 。
go泛型什么时候出go泛型2022年出 。
Golang团队认为在类型系统和运行时的复杂性花费太大 , 还没找到可以和这个复杂性相抵的良好设计 。内置的map和slice其实都有泛型的味道 , 加上可以用interface{}来构造容器,可以达到泛型的效果 。所以目前为止还没有直接的支持泛型 。
Java语言泛型:
在Java SE 1.5之前,没有泛型的情况的下 , 通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换 。
而这种转换是要求开发者对实际参数类型可以预知的情况下进行的 。对于强制类型转换错误的情况 , 编译器可能不提示错误,在运行的时候才出现异常,这是一个安全隐患 。
【go语言实现泛型了吗 go语言chan】关于go语言实现泛型了吗和go语言chan的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

推荐阅读