通常,使用 interface{} 是相对危险的 。使用更多受限制的类型总是更安全,因为可以在编译时而不是运行时发现问题 。
泛型通过允许类型具有类型参数来解决此问题:
type Stack(type T) []Tfunc (s Stack(T)) Peek() T {
return s[len(s)-1]
}
func (s *Stack(T)) Pop() {
*s = (*s)[:
len(*s)-1]
}
func (s *Stack(T)) Push(value T) {
*s =
append(*s, value)
}
这会向 Stack 添加一个类型参数,从而完全不需要 interface{} 。现在 , 当你使用 Peek() 时,返回的值已经是原始类型,并且没有机会返回错误的值类型 。这种方式更安全,更容易使用 。(译注:就是看起来更丑陋,^-^)
此外,泛型代码通常更易于编译器优化,从而获得更好的性能(以二进制大小为代价) 。如果我们对上面的非泛型代码和泛型代码进行基准测试,我们可以看到区别:
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语言实训报告:北京千锋教育、光环大数据、江苏万和计算机培训中心、千锋教育、烟台大数据培训 。
1、北京千锋教育
千锋教育开设HTML5前端、Java、Python、全链路设计、云计算、软件测试、大数据、智能物联网、Unity游戏开发、Go语言开发、网络安全、互联网营销学科go语言实训报告 , 并推出软考、Adobe认证、PMP认证、红帽RHCE认证课程,千锋年培养优质人才20000余人,全国同期在校学员8000余人 。
2、光环大数据
光环国际创办于2001年 , 至今已成立18年,上市机构(股票代码:838504),主要业务在IT培训,旗下设有Java、PMP、软考、敏捷、项目管理、大数据、Python、前端开发,H5可视化,ACP等十余种课程,累积培养技术人才100000余人,并在业界取得go语言实训报告了令人瞩目的业绩 。
3、江苏万和计算机培训中心
江苏万和计算机培训中心 , 始于1993年,经过20年坚持不懈的努力 , 通过规范化、标准化、专业化服务流程实施,江苏万和计算机培训中心已发展成为华东地区最大的专业IT培训机构 , 成为江苏省国际服务外包人才培训基地、南京市国际服务外包人才培训机构及南京市软件人才培训基地 。
4、千锋教育
千锋教育全称北京千锋互联科技有限公司一直“用良心做教育”,是中国移动互联网研发人才一体化服务的领导者 , 打造移动互联网高端研发人才服务 。有全国权威的移动互联网教学就业保障团队,毕业学员占全国移动互联网培训人才一半的份额 , 做到go语言实训报告了毕业学员业内高薪水,成为学员信赖的IT培训机构 。
5、烟台大数据培训
依托于大数据世界论坛(BDWF | Big Data World Forum),大数据培训学院拥有丰富的师资资源、国际同步的课程体系与优质的服务流程 。大数据学院教育培训项目的服务人群包括:希望事业和职务发展中更进一步的高级技术人才go语言实训报告;未来希望以大数据技术、营销、市场、管理、研究等为事业和职业目标为相关人员等 。
推荐阅读
- 朔州公司网站如何做推广,网络公司网站推广
- 怎么把软件装到手提电脑里,怎么把软件装到电脑上
- 执行脚本linux命令,linux中如何执行脚本文件
- python去重合并函数 python去重复元素
- jsp按钮点击调用js,jsp点击按钮弹出输入框
- 下载山西民生,山西民生养老保险
- c语言自定义排序的函数 c语言用自定义函数排序
- oraclehint驱动表,oracle驱动程序
- 荣耀8xmax能升级鸿蒙吗,荣耀8xmax能升级安卓10吗