专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

Go语言结构高级篇(递归类型转换接口错误处理并发)

  1、Go语言递归函数阶乘斐波那契数列2、Go语言类型转换3、Go语言接口4、Go错误处理5、Go并发Go并发通道(channel)通道缓冲区Go遍历通道与关闭通道1、Go语言递归函数
  递归,就是在运行的过程中调用自己。
  语法格式如下:funcrecursion(){recursion()函数调用自身}funcmain(){recursion()}
  Go语言支持递归。但我们在使用递归时,开发者需要设置退出条件,否则递归将陷入无限循环中。
  递归函数对于解决数学上的问题是非常有用的,就像计算阶乘,生成斐波那契数列等。1。1、阶乘
  以下实例通过Go语言的递归函数实例阶乘:packagemainimportfmtfuncFactorial(nuint64)(resultuint64){if(n0){resultnFactorial(n1)returnresult}return1}funcmain(){variint15fmt。Printf(d的阶乘是d,i,Factorial(uint64(i)))}
  以上实例执行输出结果为:15的阶乘是13076743680001。2、斐波那契数列
  以下实例通过Go语言的递归函数实现斐波那契数列:packagemainimportfmtfuncfibonacci(nint)int{ifn2{returnn}returnfibonacci(n2)fibonacci(n1)}funcmain(){variintfori0;i10;i{fmt。Printf(d,fibonacci(i))}}
  以上实例执行输出结果为:01123581321342、Go语言类型转换
  类型转换用于将一种数据类型的变量转换为另外一种类型的变量。Go语言类型转换基本格式如下:typename(expression)
  typename为类型,expression为表达式。
  以下实例中将整型转化为浮点型,并计算结果,将结果赋值给浮点型变量:packagemainimportfmtfuncmain(){varsumint17varcountint5varmeanfloat32meanfloat32(sum)float32(count)fmt。Printf(mean的值为:f,mean)}
  以上实例执行输出结果为:mean的值为:3。400000
  go不支持隐式转换类型,比如:packagemainimportfmtfuncmain(){varaint643varbint32bafmt。Printf(b为:d,b)}
  此时会报错cannotusea(typeint64)astypeint32inassignmentcannotuseb(typeint32)astypestringinargumenttofmt。Printf
  但是如果改成bint32(a)就不会报错了:packagemainimportfmtfuncmain(){varaint643varbint32bint32(a)fmt。Printf(b为:d,b)}3、Go语言接口
  Go语言提供了另外一种数据类型即接口,它把所有的具有共性的方法定义在一起,任何其他类型只要实现了这些方法就是实现了这个接口。定义接口typeinterfacenameinterface{methodname1〔returntype〕methodname2〔returntype〕methodname3〔returntype〕。。。methodnamen〔returntype〕}定义结构体typestructnamestruct{variables}实现接口方法func(structnamevariablestructname)methodname1()〔returntype〕{方法实现}。。。func(structnamevariablestructname)methodnamen()〔returntype〕{方法实现}packagemainimport(fmt)typePhoneinterface{call()}typeNokiaPhonestruct{}func(nokiaPhoneNokiaPhone)call(){fmt。Println(IamNokia,Icancallyou!)}typeIPhonestruct{}func(iPhoneIPhone)call(){fmt。Println(IamiPhone,Icancallyou!)}funcmain(){varphonePhonephonenew(NokiaPhone)phone。call()phonenew(IPhone)phone。call()}
  在上面的例子中,我们定义了一个接口Phone,接口里面有一个方法call()。然后我们在main函数里面定义了一个Phone类型变量,并分别为之赋值为NokiaPhone和IPhone。然后调用call()方法,输出结果如下:IamNokia,Icancallyou!IamiPhone,Icancallyou!4、Go错误处理
  Go语言通过内置的错误接口提供了非常简单的错误处理机制。
  error类型是一个接口类型,这是它的定义:typeerrorinterface{Error()string}
  我们可以在编码中通过实现error接口类型来生成错误信息。
  函数通常在最后的返回值中返回错误信息。使用errors。New可返回一个错误信息:funcSqrt(ffloat64)(float64,error){iff0{return0,errors。New(math:squarerootofnegativenumber)}实现}
  在下面的例子中,我们在调用Sqrt的时候传递的一个负数,然后就得到了nonnil的error对象,将此对象与nil比较,结果为true,所以fmt。Println(fmt包在处理error时会调用Error方法)被调用,以输出错误,请看下面调用的示例代码:result,err:Sqrt(1)iferr!nil{fmt。Println(err)}5、Go并发5。1、Go并发
  Go语言支持并发,我们只需要通过go关键字来开启goroutine即可。
  goroutine是轻量级线程,goroutine的调度是由Golang运行时进行管理的。
  goroutine语法格式:go函数名(参数列表)
  例如:gof(x,y,z)
  开启一个新的goroutine:f(x,y,z)
  Go允许使用go语句开启一个新的运行期线程,即goroutine,以一个不同的、新创建的goroutine来执行一个函数。同一个程序中的所有goroutine共享同一个地址空间。packagemainimport(fmttime)funcsay(sstring){fori:0;i5;i{time。Sleep(100time。Millisecond)fmt。Println(s)}}funcmain(){gosay(world)say(hello)}
  执行以上代码,你会看到输出的hello和world是没有固定先后顺序。因为它们是两个goroutine在执行:worldhellohelloworldworldhellohelloworldworldhello5。2、通道(channel)
  通道(channel)是用来传递数据的一个数据结构。
  通道可用于两个goroutine之间通过传递一个指定类型的值来同步运行和通讯。操作符用于指定通道的方向,发送或接收。如果未指定方向,则为双向通道。chv把v发送到通道chv:ch从ch接收数据,并把值赋给v
  声明一个通道很简单,我们使用chan关键字即可,通道在使用前必须先创建:ch:make(chanint)
  注意:默认情况下,通道是不带缓冲区的。发送端发送数据,同时必须有接收端相应的接收数据。
  以下实例通过两个goroutine来计算数字之和,在goroutine完成计算后,它会计算两个结果的和:packagemainimportfmtfuncsum(s〔〕int,cchanint){sum:0for,v:ranges{sumv}csum把sum发送到通道c}funcmain(){s:〔〕int{7,2,8,9,4,0}c:make(chanint)gosum(s〔:len(s)2〕,c)gosum(s〔len(s)2:〕,c)x,y:c,c从通道c中接收fmt。Println(x,y,xy)}
  输出结果为:517125。3、通道缓冲区
  通道可以设置缓冲区,通过make的第二个参数指定缓冲区大小:ch:make(chanint,100)
  带缓冲区的通道允许发送端的数据发送和接收端的数据获取处于异步状态,就是说发送端发送的数据可以放在缓冲区里面,可以等待接收端去获取数据,而不是立刻需要接收端去获取数据。
  不过由于缓冲区的大小是有限的,所以还是必须有接收端来接收数据的,否则缓冲区一满,数据发送端就无法再发送数据了。
  注意:如果通道不带缓冲,发送方会阻塞直到接收方从通道中接收了值。如果通道带缓冲,发送方则会阻塞直到发送的值被拷贝到缓冲区内;如果缓冲区已满,则意味着需要等待直到某个接收方获取到一个值。接收方在有值可以接收之前会一直阻塞。packagemainimportfmtfuncmain(){这里我们定义了一个可以存储整数类型的带缓冲通道缓冲区大小为2ch:make(chanint,2)因为ch是带缓冲的通道,我们可以同时发送两个数据而不用立刻需要去同步读取数据ch1ch2获取这两个数据fmt。Println(ch)fmt。Println(ch)}
  执行输出结果为:125。4、Go遍历通道与关闭通道
  Go通过range关键字来实现遍历读取到的数据,类似于与数组或切片。格式如下:v,ok:ch
  如果通道接收不到数据后ok就为false,这时通道就可以使用close()函数来关闭。packagemainimport(fmt)funcfibonacci(nint,cchanint){x,y:0,1fori:0;in;i{cxx,yy,xy}close(c)}funcmain(){c:make(chanint,10)gofibonacci(cap(c),c)range函数遍历每个从通道接收到的数据,因为c在发送完10个数据之后就关闭了通道,所以这里我们range函数在接收到10个数据之后就结束了。如果上面的c通道不关闭,那么range函数就不会结束,从而在接收第11个数据的时候就阻塞了。fori:rangec{fmt。Println(i)}}
  执行输出结果为:0112358132134

留抵退税大揭秘视频加载中大规模增值税留抵退税政策,是2022年新的组合式税费支持政策的重头戏。税务部门想方设法推动政策红利,精准高效直达市场主体,退税落袋,为企业的发展起到了怎样的帮助?企业又把迎接新生命比迎接兔年更重要,这些助产士除夕夜坚守一线当指针指向零点,兔年来临,鞭炮齐鸣,烟花升天之时,在宝安妇幼保健院的产房里,助产士和产妇正在经历不一样的新春。加油,很棒!你很快就能和宝贝见面了!助产士李桂荣正陪伴和鼓励着产妇。伴马拉多纳嘲笑梅西吹捧C罗的原因是什么梅西获得世界杯冠军,被很多媒体评选为球王,很多人又开始用梅西和马拉多纳来比较,说真的梅西非常尊重马拉多纳,但马拉多纳却多次嘲笑梅西,这很让人想不明白。马拉多纳为什么多次嘲笑梅西,很夜读新年,致自己草长莺飞,春暖花开。当新年的钟声敲响,挥别了过往,生活就是新的篇章。记得心怀热爱,开启这一年的惊喜。过去一年,记得谢谢自己星光不问赶路人,时光不负有心人。感谢自己,这一年没有放弃,总是相信又怀疑,怀疑又相信?生命成长是一个持续探索,持续的体验过程,它没有任何的定义,只有我们在行中知,在知中行。把我们人生当中的所有想要实现的目标,通过我们自己有序的推进,有次第的成长,最终可以显化一个超越2000年以来未曾夺冠球员进球榜凯恩居首,迪纳塔莱ampampamp帕耶在列直播吧1月26日讯在上轮联赛进球后,凯恩已经以266球追平格里夫斯并列热刺队史射手王。德转也盘点了自2000年以来,五大联赛从未夺得冠军的球员中各项赛事进球最多的球员榜单(包括俱乐政府工作报告(全文)政府工作报告2023年1月15日在甘肃省第十四届人民代表大会第一次会议上甘肃省省长任振鹤各位代表我代表省人民政府,向大会报告工作,请予审议,并请省政协委员和其他列席人员提出意见。一迷倒两位千亿富豪,逼刘銮雄道歉,这个女人不简单香港律师王颖妤,长着小眼睛招风耳,与人们心中的美女形象完全不搭边,但就是这样一个长相普通的女人,却能迷倒两位千亿富豪,让刘銮雄求婚五次。这不禁让人好奇,王颖妤是怎样一个女人,她有什历史文化源流自强不息勇毅前行主持人王学斌(中央党校文史教研部教授)嘉宾孙羽津(中央党校文史教研部副教授)翟金明(人民出版社编辑文史学者)党的二十大报告指出,中华优秀传统文化源远流长博大精深,是中华文明的智慧结夜读散文第一缕阳光清晨的第一缕阳光,不灼热不扎眼,清新温暖,充满朝气,给人力量。在驻地,这样的天气经常有,这样的阳光也经常有。一二三四的呼号声伴随着金色的阳光,铺洒在朝气蓬勃的军营里,陪伴我们度过一婆媳村医,乡邻们的守护神乡村医生是基层老百姓的健康守门人,面对有限的医疗资源和医护人员,他们该如何为百姓的健康保驾护航呢。今天记者来到了襄城区卧龙镇回龙村的卫生室,在这里坚守的两位村医是婆媳关系。前段时间
脑出血有征兆,你平时注意到了吗?脑出血是脑卒中的一种,发病前往往有许多先兆,比如大多会有一次到多次的短暂脑缺血发作,表现为突然发生的单眼或双眼看不清东西,面部或单侧肢体麻木无力,说话不清楚,突然出现的剧烈头痛,头肌肉长期不练会消失吗?我有靠谱回答大家好!我是赛普冠军导师徐乐。一个星期没有跟大家回答问题了!今天的问题是肌肉长期不练会消失吗?30岁以后每年肌肉都会一定比例流失,年纪越大流失肌肉越多,这个大家都知道,中国工商银行为什么有宇宙行之称呢?工商银行被称为宇宙第一大行,还是有原因的,营收多,赚钱多,资产规模。1世界排名2018年全球银行1000强排名,其中前50强中国占据了12强,是上榜数量最多的国家,美国以7家排名第十三年工龄的公务员因病无法坚持工作,可以病退吗?公务员病退没有工作年限限制。公务员病退按基础工资工龄工资为基数。一工作年限35年,按88领取病退退休金二工作年限30年,不满35年,按82领取病退退休金三工作年限20年,不满30年农民歌手朱之文到底能不能称为艺术家?平凡真的有错吗?能不能成为艺术家那是他自己以后的事,平凡真的有错吗?你说呢?这个话题太小儿科了,先去找一些书籍看看吧!歌手歌星艺术家,距离太远了。努力吧!朱之文没有文化,没有原唱,不识乐谱,不会创农村喝酒怪象桌上白酒啤酒很丰盛,却很少有人喝,为何?都等着打包带回家呗现在的人几乎都害恐高症,特别是三高(血压高血脂高血糖高),让人望而生畏,不敢过多亲蜜接触。你一叫人喝酒,人说我开车来的。喝喜酒,上桌一看,没几个认识的,气氛都没有打工是最愚蠢的投资,为什么还有那么多人打工?有力者吃力,有智者吃智。没有为什么。打工只是出卖劳动力,不能算投资。打工是养活自己最简单的最有效的方法。所以大多数人都是打工出生,通过打工,不断提高自己的工作能力,一份好的工作,收欠了15万,信用卡,借呗,网商贷,有点还不上了怎么办?15万,先还信用卡,跟他们协商分期还本金,在自己经济能力可以承受范围内借呗主动电话官方客服延期还款15年,网商贷,网络贷款一样,说明处境,有能力时候一次性协商还本金。信用卡起诉概率哈尔滨高龄津贴怎么发放?谢谢你的邀请。首先,真是羡慕那些七老八十甚至过百岁的老人,每天和子女共享天伦之乐,想想就很幸福。人活一辈子不容易,高龄当然要有点津贴嘛,不能白吃饭,是吧(偷笑)。哈尔滨高龄津贴发放宝宝不吃夜奶了,会影响白天母乳的产量吗?我家宝宝两个月的时候也是一觉能睡个六七个小时。后面我是涨奶很不舒服的时候吸一下,如果舒服的情况下我就不吸了。他刚开始睡长觉的时候,我奶涨得比较厉害。有的时候硬得跟石头一样,而且还往谁能简单说一下,毁了薇娅的究竟是什么吗?毁了薇娅的是她自己,光顾着争钱了,别的什么都不问了,我想他自己挣了多少钱,自己可能都不知道。挣钱要交税应该是知道的,也须就是光只挣钱,公司的事也不问了,导致偷税漏税发生,这么红落得
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网