欢迎来到天天文库
浏览记录
ID:34395274
大小:134.44 KB
页数:9页
时间:2019-03-05
《《google go:初级读本》》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、文件:未保存文档1第1页共9页GoogleGo:初级读本作者:SamuelTesla译者:黄璜Go语言是什么?Google最近发布新型的编程语言,Go。它被设计为将现代编程语言的先进性带入到目前仍由C语言占统治地位的系统层面。然而,这一语言仍在试验阶段并在不断演变。Go语言的设计者计划设计一门简单、高效、安全和并发的语言。这门语言简单到甚至不需要有一个符号表来进行词法分析。它可以快速地编译;整个工程的编译时间在秒以下的情况是常事。它具备垃圾回收功能,因此从内存的角度是安全的。它进行静态类型检查,并且不
2、允许强制类型转换,因而对于类型而言是安全的。同时语言还内建了强大的并发实现机制。阅读GoGo的语法传承了与C一样的风格。程序由函数组成,而函数体是一系列的语句序列。一段代码块用花括号括起来。这门语言保留有限的关键字。表达式使用同样的中缀运算符。语法上并无太多出奇之处。Go语言的作者在设计这一语言时坚持一个单一的指导原则:简单明了至上。一些新的语法构件提供了简明地表达一些约定俗成的概念的方式,相较之下用C表达显得冗长。而其他方面则是针对几十年的使用所呈现出来的一些不合理的语言选择作出了改进。变量声明变量
3、是如下声明的:varsumint//简单声明vartotalint=42//声明并初始化最值得注意的是,这些声明里的类型跟在变量名的后面。乍一看有点怪,但这更清晰明了。比如,以下面这个C片段来说:int*a,b;它并明了,但这里实际的意思是a是一个指针,但b不是。如果要将两者都声明为指针,必须要重复星号。然后在Go语言里,通过如下方式可以将两者都声明为指针:vara,b*int如果一个变量初始化了,编译器通常能推断它的类型,所以程序员不必显式的敲出来:varlabel="name"然而,在这种情况下v
4、ar几乎显得是多余了。因此,Go的作者引入了一个新的运算符来声明和初始化一个新的变量:name:="Samuel"条件语句Go语言当中的条件句与C当中所熟知的if-else构造一样,但条件不需要被打包在括号内。这样可以减少阅读代码时的视觉上的混乱。括号并不是唯一被移去的视觉干扰。在条件之间可以包括一个简单的语句,所以如下的代码:result:=someFunc();ifresult>0{/*Dosomething*/}else{/*Handleerror*/}可以被精简成:ifresult:=some
5、Func();result>0{/*Dosomething*/}else{/*Handleerror*/}然而,在后面这个例子当中,result只在条件块内部有效——而前者中,它在整个包含它的上下文中都是可存取的。分支语句分支语句同样是似曾相识,但也有增强。像条件语句一样,它允许一个简单的语句位于分支的表达式之前。然而,他们相对于在C语言中的分支而言走得更远。文件:未保存文档1第2页共9页首先,为了让分支跳转更简明,作了两个修改。情况可以是逗号分隔的列表,而fall-throuth也不再是默认的行为。
6、因此,如下的C代码:intresult;switch(byte){case'a':case'b':{result=1break}default:result=0}在Go里就变成了这样:varresultintswitchbyte{case'a','b':result=1default:result=0}第二点,Go的分支跳转可以匹配比整数和字符更多的内容,任何有效的表达式都可以作为跳转语句值。只要它与分支条件的类型是一样的。因此如下的C代码:intresult=calculate();if(resul
7、t<0){/*negative*/}elseif(result>0){/*positive*/}else{/*zero*/}在Go里可以这样表达:switchresult:=calculate();true{caseresult<0:/*negative*/caseresult>0:/*positive*/default:/*zero*/}这些都是公共的约定俗成,比如如果分支值省略了,就是默认为真,所以上面的代码可以这样写:switchresult:=calculate();{caseresult<0
8、:/*negative*/caseresult>0:/*positive*/default:/*zero*/}循环Go只有一个关键字用于引入循环。但它提供了除do-while外C语言当中所有可用的循环方式。条件fora>b{/*...*/}初始,条件和步进文件:未保存文档1第3页共9页fori:=0;i<10;i++{/*...*/}范围range语句右边的表达式必须是array,slice,string或者map,或是指向array的指针,也可以是ch
此文档下载收益归作者所有