1.2.6 Go语言 - 2007~2009
贝尔实验室后来经历了多次动荡,包括Ken Thompson在内的Plan9项目原班人马最终加入了Google公司。在发明Limbo等前辈语言诞生10多年之后,在2007年底,Go语言三个最初的作者因为偶然的因素聚集到一起批斗C++(传说是C++语言的布道师在Google公司到处鼓吹的C++11各种牛逼特性彻底惹恼了他们),他们终于抽出了20%的自由时间创造了Go语言。最初的Go语言规范从2008年3月开始编写,最初的Go程序也是直接编译到C语言然后再二次编译为机器码。到了2008年5月,Google公司的领导们终于发现了Go语言的巨大潜力,从而开始全力支持这个项目(Google的创始人甚至还贡献了func关键字),让他们可以将全部工作时间投入到Go语言的设计和开发中。在Go语言规范初版完成之后,Go语言的编译器终于可以直接生成机器码了。
1.2.6.1 hello.go - 2008年6月
package main
func main() int {
print "hello, world\n";
return 0;
}这是初期Go语言程序正式开始测试的版本。其中内置的用于调试的print语句已经存在,不过是以命令的方式使用。入口main函数还和C语言中的main函数一样返回int类型的值,而且需要return显式地返回值。每个语句末尾的分号也还存在。
1.2.6.2 hello.go - 2008年6月27日
package main
func main() {
print "hello, world\n";
}入口函数main已经去掉了返回值,程序默认通过隐式调用exit(0)来返回。Go语言朝着简单的方向逐步进化。
1.2.6.3 hello.go - 2008年8月11日
package main
func main() {
print("hello, world\n");
}用于调试的内置的print由开始的命令改为普通的内置函数,使得语法更加简单一致。
1.2.6.4 hello.go - 2008年10月24日
package main
import "fmt"
func main() {
fmt.printf("hello, world\n");
}作为C语言中招牌的printf格式化函数已经移植了到了Go语言中,函数放在fmt包中(fmt是格式化单词format的缩写)。不过printf函数名的开头字母依然是小写字母,采用大写字母表示导出的特性还没有出现。
1.2.6.5 hello.go - 2009年1月15日
package main
import "fmt"
func main() {
fmt.Printf("hello, world\n");
}Go语言开始采用是否大小写首字母来区分符号是否可以被导出。大写字母开头表示导出的公共符号,小写字母开头表示包内部的私有符号。国内用户需要注意的是,汉字中没有大小写字母的概念,因此以汉字开头的符号目前是无法导出的(针对问题中国用户已经给出相关建议,等Go2之后或许会调整对汉字的导出规则)。
1.2.6.7 hello.go - 2009年12月11日
package main
import "fmt"
func main() {
fmt.Printf("hello, world\n")
}Go语言终于移除了语句末尾的分号。这是Go语言在2009年11月10号正式开源之后第一个比较重要的语法改进。从1978年C语言教程第一版引入的分号分割的规则到现在,Go语言的作者们花了整整32年终于移除了语句末尾的分号。在这32年的演化的过程中必然充满了各种八卦故事,我想这一定是Go语言设计者深思熟虑的结果(现在Swift等新的语言也是默认忽略分号的,可见分号确实并不是那么的重要)。
学员评价