如何看待go语言泛型的最新设计?

Python019

如何看待go语言泛型的最新设计?,第1张

Go 由于不支持泛型而臭名昭著,但最近,泛型已接近成为现实。Go 团队实施了一个看起来比较稳定的设计草案,并且正以源到源翻译器原型的形式获得关注。本文讲述的是泛型的最新设计,以及如何自己尝试泛型。

例子

FIFO Stack

假设你要创建一个先进先出堆栈。没有泛型,你可能会这样实现:

type Stack []interface{}func (s Stack) Peek() interface{} {

 

return s[len(s)-1]

}

func (s *Stack) Pop() {

 *s = (*s)[:

len(*s)-1]

}

func (s *Stack) Push(value interface{}) {

 *s = 

append(*s, value)

}

但是,这里存在一个问题:每当你 Peek 项时,都必须使用类型断言将其从 interface{} 转换为你需要的类型。如果你的堆栈是 *MyObject 的堆栈,则意味着很多 s.Peek().(*MyObject)这样的代码。这不仅让人眼花缭乱,而且还可能引发错误。比如忘记 * 怎么办?或者如果您输入错误的类型怎么办?s.Push(MyObject{})` 可以顺利编译,而且你可能不会发现到自己的错误,直到它影响到你的整个服务为止。

通常,使用 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 i < b.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 i < b.N i++ {

  

var s Stack(MyObject)

  s.Push(MyObject{})

  s.Push(MyObject{})

  s.Pop()

  sink = s.Peek()

 }

}

结果:

BenchmarkGo1BenchmarkGo1-16     12837528         87.0 ns/op       48 B/op        2 allocs/opBenchmarkGo2BenchmarkGo2-16     28406479         41.9 ns/op       24 B/op        2 allocs/op

在这种情况下,我们分配更少的内存,同时泛型的速度是非泛型的两倍。

合约(Contracts)

上面的堆栈示例适用于任何类型。但是,在许多情况下,你需要编写仅适用于具有某些特征的类型的代码。例如,你可能希望堆栈要求类型实现 String() 函数

首席导师:波子

舞龄:8年

现在职业: DANCER

擅长舞蹈种类:POPPIN HOUSE

授课经历:

广州SPEED培训基地POPPIN二级导师

江门TRICKS COMBO舞蹈工作室POPPIN导师

广州大学城星艺街舞培训中心POPPIN导师

广州华美学校街舞社POPPIN导师

获奖经历:

2005江门首届FUNKY TOGERTER 街舞PARTY 第一名

2006深圳B2D全国街舞挑战赛I POPPIN 16强

2006广州天河区街舞大赛银奖 表演奖

2007广州SPEED EVIDANCE PARTY POPPIN冠军

2007广州可乐生活街舞比赛POPPIN冠军

2007深圳B2D全国街舞挑战赛II POPPIN 16强

2007深圳B2OS FUNKY PARTY 第一名

2008决战中国POPPING BATTLE 8强

2008who is the best 全国街舞大赛广东站 POPPIN BATTLE 16强

2008 SPEED FUNKY PARTY poppin1 on 1 冠军

2008 uk b boy championships china hainan poppin battle 冠军

2008 OTS街舞大赛广州站FUNKY STYLE BATTLE 第二名

2008 THE ONE GZ DANCE COMPETITION 国际街舞挑战赛 16强

2009 WHAT DA FUNK 香港街舞比赛POPPIN BATTLE 8强

2009 江门LET'S GROOVE TONIGHT POPPIN BATTLE 亚军

2009 广州<FLY BY NIGHT>POPPIN BATTLE 亚军

2010 法国JUSTE DEBOUT世界街舞比赛 中国武汉赛区 HOUSE BATTLE 8

2010 北京KEEP ON DANCING 世界街舞比赛POPPIN BATTLE 100强

2010 CCTV全国街舞电视大赛团体 金奖 参赛作品:当代青年

2010.6 中山feeling music vol.2 popping冠军

演出经历:

佛山UOB HIPHOP PARTY FUNKY裁判

2008 广州大学BATTLE大赛第二届 POPPIN 裁判

2009年周末画报10周年演出嘉宾

2009年参加SPEED舞团十周年大型舞蹈展

2009年M STYLE中学生街舞联盟 POPPIN BATTLE裁判

2009 佛山<双城决>街舞比赛 POPPIN 裁判

2010 广州本田新春晚会 香港歌手侧田 伴舞

2010 海马/起亚汽车全国车展巡回表演嘉宾

2010 宝马X6新车发布会表演嘉宾

----------------------------------------------------------------------------------------------------------------------------

首席导师:JILL

舞龄:4年

擅长舞种:HIPHOP、JAZZ、WACKIN

教学经历:

2007年-2008年广州大学华软软件学院舞协其下分队nps队长,在校负责hiphop,jazz等教学工作。

2008-2009年在广州next track舞团任hiphop,girls style导师,以及主力成员。其间亦到广州多所大学任教。

2007年-至今江门tricks combo舞团hiphop,girls style导师

多次到上海进修hiphop,jazz,wackin等,曾跟随法国hiphop大师joseph go学习。

获奖情况:

活力侨乡2007最佳演艺大奖

活力侨乡2007动感舞蹈活力大奖

活力侨乡2007最受现场观众欢迎奖

活力侨乡2007动感街舞大奖

2007首届青少年潮流文化节街舞比赛季军

2008第二届青年文化节街舞比赛第4名

演出经历:

2007年-2008年在广州大学华软软件学院任街舞队队长期间多次带队代表学校到别校交流演出

2008年10月25日《珠江小姐竞选》舞台策划及全场演出

2008-2009年BOSSINI春,夏,秋,冬季时装发布会的舞台策划和演出

2008IC首届资优生才艺大赛表演嘉宾

2008第三届声墙音乐节表演嘉宾

2009年10月张娜拉广州歌友见面会开场舞表演嘉宾

2007-至今各种大小品牌商业演出

--------------------------------------------------------------------------------------------------------------------------------

一级导师:鱼蛋

舞龄:5年

擅长舞种:POPPING、FREE STYLE

曾进修于法国popper mike广州popping班

曾担任珠海科干学院特训班导师

获奖经历:

江门市第3届“蓬江风采”青少年街舞大赛金奖

活力侨乡2007最佳演艺大奖

活力侨乡2007动感舞蹈活力大奖

活力侨乡2007动感街舞大奖

中山乐活街舞比赛齐舞季军

2007首届青少年潮流文化节街舞比赛亚军

2007南海嘉洲广场心随舞动街舞比赛冠军

2008第二届青年文化节街舞比赛第3名

2008佛山UOB比赛funk style8强

2008简爱家居舞蹈大赛季军

活力侨乡2007最佳演艺大奖

活力侨乡2007动感舞蹈活力大奖

活力侨乡2007动感街舞大奖

中山乐活街舞比赛齐舞季军

2007首届青少年潮流文化节街舞比赛亚军

2007南海嘉洲广场心随舞动街舞比赛冠军

2008.法国popper mike广州popping班

2008第二届青年文化节街舞比赛第3名

2008佛山UOB比赛funk style8强

2008简爱家居舞蹈大赛季军

2009.中国移动热舞倾城舞蹈大赛冠军

2009.北京KOD VOL.5亚洲街舞精英赛99强

2009.江门LGT街舞比赛popping32强

2009.广州back to old school比赛popping 32强

2009.佛山UOB VOL2比赛funk style16强

2010中山feeling music vol.2 popping亚军

2010江门FREE STYLE BATTLE VOL.1 四强

演出经历:

江门市第3届“蓬江风采”青少年街舞大赛金奖

江门电视台‘车行天下’栏目汽车风云榜表演嘉宾

2008.接受江门电视台<<新闻共同睇>>采访.

2008.接受江门日报采访.

2008IC首届资优生才艺大赛表演嘉宾

2008第三届声墙音乐节表演嘉宾

2008.512地震新会义演表演团体

2008.512地震益华义演表演团体

2009.12 江门益华广场服装show演出嘉宾

2009.12 欧莱雅旗下美发产品美奇丝新品发布会演出嘉宾

2010.5 中山古镇灯饰国际广场开业表演嘉宾

2010.6 五邑大学第23届文化艺术节闭幕式演出嘉宾

2010.6 逸豪酒店百威月饼订货会表演嘉宾

2010.7 广东省教育博览会表演嘉宾

----------------------------------------------------------------------------------------------------------------------------------

一级导师:STAR

舞龄:3年

擅长舞种:Jazz、Girl's stlye

曾在广州知名舞团speed进修

授课情况:

2009.6月—8月 担任江门市波迪健身中心健身街舞导师

2009.7月—至今 担任TC流行舞工作室GRIL’S STYLE和JAZZ导师

演出经验:

2007年珠海艺术学院ONE TWO STAR街舞社团创办人之一,担任学院各文艺晚会的演出嘉宾

2007.12第三届珠海大学生艺术节舞蹈比赛获得街舞组优秀奖

2008.5 珠海形创影视公司四川赈灾晚会演出嘉宾

2008.11珠海2008年八大高校街舞交流会的演出

2009.4 BENZ新车发布会演出嘉宾

2009.12 中国平安保险广东分公司平安夜歌手大赛担任伴舞

2009.12 美奇丝美发产品新品发布会演出嘉宾

2009.12 江门益华迎新服装show演出嘉宾

获奖情况 :

2007.12第三届珠海大学生艺术节舞蹈比赛获得街舞组优秀奖

2009.8 江门电台首届 声优LADY比赛,在才艺环节凭借出色的街舞演出获得亚军

2010 荣获茂德公HIPHOP达人江门赛区齐舞组季军

2010中山feeling music vol.2 HIPHOP八强

2010 江门FREE STYLE BATTLE VOL.1 亚军

---------------------------------------------------------------------------------------------------------------------------------

一级导师:肥羊

舞龄:3年

擅长舞种:LOCKING GIRL'S TYLE

参赛以及获奖经历:

2008年广州Who is best (WIB)

2008年江门JM HipHop Party 2008

2008年博皇家居才艺大奖赛周冠军赛得第二名

2008年第一届佛山Hip Hop Party

2009年北京Keep On Dancing (KOD)

2009年江门移动热舞倾城团体齐舞第一名和最受欢迎团体

2009年江门第一届let's groove tonight 2009

2010年珠海北师大Funky party

2010年佛山 unlimited of battle

1. 进入微信界面,下拉展开最近使用的小程序,比如选择其中一个。

2. 进入后点击下方我的。

3. 点击上方头像。

4.弹出界面点击退出登录,完成退出。

5.再登录可以了