我为什么喜欢Go语言(简洁的Go语言)
从2000年至今,也写了11年代码了,期间用过VB、Delphi、C#、C++、Ruby、Python,一直在寻找一门符合自己心意和理念的语言。我很在意写代码时的手感和执行的效率,所以在Go出现之前一直没有找到。在熟悉Go之后,我虽没有停下脚步,也去体验了D语言,但几乎立即就放弃了,它的设计还是太复杂。
就说说Go吧。它的好其实也就两个字——简洁!
看很多朋友的留言都觉得这些"少个括号、少个分号"之类的东西没什么意义,真的吗?问题是,既然可以没有,为什么非得有?既然能够少打一个字符,为什么多打了还挺开心?还觉得天经地义?这里简单一点,那里简单一点,总的来说是不是就简单了很多?这里的设计简洁一点,那里简洁一点,是否整体就是紧凑高效?
很多东西,要整体去体会,才能感觉到真正的强大。没有前面这些语法上的各种"看起来没什么用"的支持,怎么能做到后面提到的那些设计上的简洁?
我坚信,少就是多,简单就是强大,不能减一分的设计才是真正的好设计!
简洁的变量声明和赋值
拿最简单的声明变量和赋值来看,下面这一句完成了声明类型到赋值,最后还有那个常见的分号作为语句的结束。
variint=10;
这个一点都不简洁对吧?为什么非要有"var"?为什么不能自己推导变量类型?为什么结尾非要加上分号?这三个问题,我相信Go语言的设计者也问过,并且都针对性的给了改进。重新来过。
i:=10
怎么样?":="是声明并推导类型的语法糖,结尾的分号也省了,因为这里我换行了,编译器明白的。
还可以一次性声明并赋值多个变量。
i,j,k:=1,2,3
不同的类型也可以。
i,j,k:=1,1.0,"hello"
如果要声明一堆变量,但暂时不赋值呢?可以这样。
var(
i,jint sstring
u,v,s=2.0,3.0,"bar")
Go的设计者甚至觉得多打几个"var"都不应该!
简洁的if
有点意思了对吧?我学习一门新语言的时候,第一眼看变量类型和声明,第二眼就会去看逻辑控制的语法。现在来看看都有些什么?
ifi>10{ println("Greaterthen10") }
稀松平常啊,难道一个简单的if还能更简单?恩,的确是的。首先if后面的条件判断没有人逼你再加上括号了,仅仅是少了两次按键嘛,还有呢?还有!下面这个应该是很常见的if使用场景。
result:=SomeMethod() ifresult>0{ }
很多时候result这个变量其实仅仅用于条件判断,完全可以在if之后就扔掉,所以Go有了这么个写法。
ifresult:=SomeMethod();result>0{
}
这个表达式太常用了,真是谁写谁知道,每次我写着一行都会心里一爽。来看看纠结一点的if段。
ifa{ }elseifb{ }elseifc{ }else{ }
这种写法是可以的,但不是Go推荐的,理由是可以更简洁。比如强悍的switch。
强悍的switch
这是很大家熟知的switch用法,注意,没有break哦!Go里面case之间不会"下穿"。
switchtag{ default: s3() case0,1,2,3: s1() case4,5,6,7: s2() }
神奇一点的switch,嘿嘿,与if异曲同工之妙。
switchx:=f();{ //missingswitchexpressionmeans"true" casex<0:return-x default:returnx }
还有这个,有了这个更加明确的写法,你真的还会if…elseif…elseif…else…吗?
switch{ casex<y:f1() casex<z:f2() casex==4:f3() }