一、前言
Google的三位大牛,为了解决在21世纪多核和网络化环境下越来越复杂的编程问题而发明了go语言,
从2007年9月开始设计和实现,于2009年的11月对外正式发布。从版本的发布历史来看,go语言是从
Ken Thompson发明的B语言、Dennis M. Ritchie发明的C语言逐步演化过来的,是C语言家族的成员,
因此很多人将Go语言称为21世纪的C语言。
纵观这几年来的发展趋势,Go语言已经成为云计算、云存储时代最重要的基础编程语言。
Go语言有着和C语言类似的语法,但是它不仅仅是一个更新的C语言。它还从其他语言借鉴了很多好的
想法,同时避免引入过度的复杂性。 Go语言中和并发编程相关的特性是全新的也是有效的,
同时对数据抽象和面向对象编程的支持也很灵活。 Go语言同时还集成了自动垃圾收集技术用
于更好地管理内存。
Go语言尤其适合编写网络服务相关基础设施,同时也适合开发一些工具软件和系统软件。
目前Go语言已经成为受欢迎的作为无类型的脚本语言的替代者: 因为Go编写的程序通常比脚本语言运
行的更快也更安全,而且很少会发生意外的类型错误。
Go语言还是一个开源的项目,可以免费获编译器、库、配套工具的源代码。
Go语言编写的程序无需修改就可以在不同的系统环境下运行。
二、 Go语言的设计哲学
Go语言的编程哲学是简洁。
正如Rob Pike所说,“软件的复杂性是乘法级相关的”,通过增加一个部分的复杂性来修复问题
通常将慢慢地增加其他部分的复杂性。通过增加功能和选项和配置是修复问题的最快的途
径,但是这很容易让人忘记简洁的内涵,即使从长远来看,简洁依然是好软件的关键因素。
简洁的设计需要在工作开始的时候舍弃不必要的想法,并且在软件的生命周期内严格区别好
的改变或坏的改变。通过足够的努力,一个好的改变可以在不破坏原有完整概念的前提下保
持自适应,正如Fred Brooks所说的“概念完整性”;而一个坏的改变则不能达到这个效果,它
们仅仅是通过肤浅的和简单的妥协来破坏原有设计的一致性。只有通过简洁的设计,才能让
一个系统保持稳定、安全和持续的进化。
Go语言有足够的类型系统以避免动态语言中那些粗心的类型错误,但是Go语言的类型系统相
比传统的强类型语言又要简洁很多。。在实践中Go语言简洁的类型系统给了程序员带来了更
多的安全性和更好的运行时性能。
Go语言鼓励当代计算机系统设计的原则,特别是局部的重要性。它的内置数据类型和大多数
的准库数据结构都经过精心设计而避免显式的初始化或隐式的构造函数,因为很少的内存分
配和内存初始化代码被隐藏在库代码中了。比如,Go语言的动态栈使得轻量级线程goroutine
的初始栈可以很小,因此创建一个goroutine的代价很小,创建百万级的goroutine完全是可行的。
Go程序也很容易学习。
使用Go语言自带工具构建Go语言项目只需要使用文件名和标识符名称, 一个偶尔的特殊注释来确定所有的
库、可执行文件、测试、基准测试、例子、以及特定于平台的变量、项目的文档等;Go语言
源代码本身就包含了构建规范。
三、Go语言入门
运行环境:
root@ubuntu:~# go version
go version go1.6.2 linux/amd64
设置GOPATH:
root@ubuntu:/home/go# export GOPATH=/home/go
root@ubuntu:/home/go# echo $GOPATH
/home/go
学习一门新语言时,一种仪式性的开场程序就是从那个经典的helloWorld开始:
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
root@ubuntu:/home/go/ch01# go run helloworld.go
Hello, World!
root@ubuntu:/home/go/ch01# go build helloworld.go
root@ubuntu:/home/go/ch01# ls -l
total 2240
-rwxr-xr-x 1 root root 2288216 Jun 30 03:13 helloworld
-rw-r--r-- 1 root root 74 Jun 30 03:10 helloworld.go
root@ubuntu:/home/go/ch01# ./helloworld
Hello, World!