此外 , 泛型代码通常更易于编译器优化,从而获得更好的性能(以二进制大小为代价) 。如果我们对上面的非泛型代码和泛型代码进行基准测试,我们可以看到区别:
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() 函数
【2019年Go语言 go语言入门指南】关于2019年Go语言和go语言入门指南的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。
推荐阅读
- 教育培训课程直播话术,培训班直播
- 鸿蒙荣耀v20如何预约,荣耀v20鸿蒙申请
- d3d游戏开发,3d游戏开发大全
- 新硬盘是真的吗怎么激活,新硬盘买回来怎么处理
- thinkphp装修平台源码,装修公司php网站源码
- 更新频繁适用于hbase吗,hbase更新部分数据
- go语言udp传输最快 go语言 socket
- 显卡怎么送检,水泥怎么送检
- 如何删除sqlserver服务管理器,删除sqlserver2008