当前位置: 首页 > 后端技术 > Python

为什么Go有两种声明变量的方式,有什么区别,哪种更好?

时间:2023-03-26 19:33:58 Python

大家好,我是炸鱼。一位刚入门Go的读者提出了一个有趣的问题:Go有几种声明变量的方式。作为初学者,你应该使用哪一种,有什么区别,为什么会有多种声明变量的方式?为此,剑鱼就和大家一起探讨这个问题。变量声明在Go中,有两种声明变量的方式,每种方式都有不同的使用场景。它们是:标准变量声明(Variabledeclarations)。短变量声明(Shortvariabledeclarations)标准声明变量声明创建一个或多个变量,将它们绑定到相应的标识符,并赋予每个变量一个类型和一个初始值。使用语法:VarDecl="var"(VarSpec|"("{VarSpec";"}")").VarSpec=IdentifierList(Type["="ExpressionList]|"="ExpressionList)。案例代码:variintvarU,V,Wfloat64vark=0varx,yfloat32=-1,-2var(iintu,v,s=1.0,2.0,"outofmymind")短声明短变量宣言。使用语法:ShortVarDecl=IdentifierList":="ExpressionList。案例代码:s:="Friedfishgotintothebrain"i,j:=0,10f:=func()int{return7}ch:=make(chanint)r,w,_:=os.Pipe()_,y,_:=coord(p)网友不解。在我们组一个围棋的读者问到这个问题后,我也搜了一下相关资料。我发现有人在stackoverflow上提出了类似的疑惑:问题是:使用哪种声明方式让人迷惑。题目纠结的原因是:如果一个只是另一个的简写,为什么它们的表现会不同?出于什么原因Go的作者允许两种方式来声明一个变量(为什么不将它们合并为一种方式)?只是为了迷惑我们?我在使用的时候还有其他需要注意的地方,以免掉坑里吗?下面我们结合这个问题在stackoverflow上的内容和答案进一步展开。想一想:standardstatement和shortstatement,两者有什么区别,还是可以随便用?不同的是,当代码块的分组声明使用包含关键字var的声明语法时,可以像package、import、const、type、var等其他关键字一样声明为分组代码块。例如:var(iintu,v,s=1.0,2.0,"Mybrainisfried")不支持短语句。指定变量的初始值。使用标准变量定义时,我们只能声明而不能主动定义变量的初始值(默认值为零)。例如:var(iintsstring)和短声明是不可接受的,你必须在程序中主动为变量定义一个值。例如:s:="Mybrainisfryingfish"即使这里定义的是空字符串,也是用户端定义的,而不是默认的零值。局部变量,区分作用域在编写程序的时候,我们经常会有一些局部变量的声明,作用域是有限制的。你可以看看你自己的代码。这时候,我们就采取短语句的方式。例如:foridx,value:=rangearray{//使用索引和值做一些事情}ifnum:=runtime.NumCPU();num>1{fmt.Println("MulticoreCPU,cores:",num)}short声明在这种情况下具有明确的优势,标准变量声明并不讨人喜欢。Go语言规范中明确提到变量的重声明。短变量声明可以重新声明变量。这是一个高频的重新声明覆盖动作。如下:varname="FriedFish.txt"fi,err:=os.Stat(name)iferr!=nil{log.Fatal(err)}data,err:=ioutil.ReadFile(name)iferr!=nil{log.Fatal(err)}...上面代码中重复定义了err变量。现在如果err!=nil横行,这里短变量的优势简直就是大杀器。综上所述,相信很多朋友在刚开始的时候都纠结于此,或者很多教程根本就没有弄清楚这两种变量声明的区别。在今天的文章中,我们介绍了Go中的两种类型的变量声明。它还解释了存在短语句的场景。主要是:代码块的分组声明。指定变量的初始值。局部变量,独立作用域。重新声明变量。你认为变量声明还有其他优点和缺点吗?欢迎评论区交流:)如有任何问题,欢迎在评论区反馈交流。最好的关系是相互成就。您的点赞是建宇创造的巨大动力,感谢您的支持。文章持续更新中。可以微信搜索【脑补炸鱼】阅读。本文已收录在GitHubgithub.com/eddycjy/blog中。学习Go语言可以看Go学习地图和路线。欢迎星星提醒。参考GoLangVariableDeclaration为什么Go中有两种声明变量的方式,有什么区别,使用哪一种?在go(golang)中声明变量时的最佳实践是什么?例如。我应该使用“varxint=1”还是只使用“x:=1”?