此外,泛型代码通常更易于编译器优化,从而获得更好的性能(以二进制大小为代价) 。如果go语言翻译器我们对上面的非泛型代码和泛型代码进行基准测试,我们可以看到区别:
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) {
【go语言翻译器 go语言中文网】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语言中文网、go语言翻译器的信息别忘了在本站进行查找喔 。
推荐阅读
- 游戏开发物语最强职员,游戏开发物语最强8人用不用转职
- 直播跳街舞的视频叫什么,直播跳街舞的视频叫什么来着
- asp.nettable加边框,table内边框怎么设置
- flutter混合自动化测试,flutter混合开发框架
- vb.net中替换字符串 vb6 替换字符
- 游戏redis挂了怎么处理,redis挂了怎么办
- 动感节奏竞速游戏,动感节奏竞速游戏有哪些
- 筷子游戏慢动作,筷子趣味游戏
- linuxee命令 linuxecho命令详解