作为一个程序员,要有一颗不断上进的心,不然就永远只能有程序员的称号。俗话说技多不压身,活到老学到老。
博主最开始就是做Web开发的,后来才转战到iOS。大学的时候培训过Java那一套东东,学过SSH开源的那些框架,毕业设计也是用Java做的。但是找工作的时候却是找了.Net的,用C#做开发。直到最近觉得有必要把Web的东西拾起来,觉得没有必要局限在一个圈子中。其实拾起Java或者.Net应该会很快,毕竟有基础,同时我也考虑过Ruby。其实前年的时候就有同事给我推荐过Go语言,那时没在意,在了解了下Go语言后觉得是更好的选择,所以就选择Go语言。
博主虽然用过不少语言,非常熟悉的应该算是OC了。从去年苹果发布Swift之后,博主一直在学习和使用Swift,加上之前做的Swift博文以及几个自己的项目,对Swift也是非常熟悉了。在大概浏览了下Go语言后,我到觉得Swift借鉴了不少Go的语法及特点。这两门语言有很多相似的地方,据很多Ruby开发者说Swift与Ruby也很相似。Swift真是集众家之长啊,另外在6月初的WWDC大会上宣布Swift的编译器和标准库将在年底开源,所以Swift将来也会像Go一样成为全栈式的开发语言?!
对于编程语言其实没有什么好说的,很多时候编程语言并不是重点,因为编程语言实在是太多了。我觉得正确的做法就应该是非常非常精通一门语言,然后学习其他语言就能很快上手了,因为很多语言都是相似的。博主那时候就花了几天的时间了解了下OC的语法,看了些实例就开始做iOS开发了。虽然那时我根本不知道他们说的发送消息是什么意思,也不知道和函数调用的区别,但是使用是完全没问题的。而且iOS开发,重点不在OC这门语言,而在于Cocoa Touch框架。
扯了好多蛋,让我们开始吧。最后说一句,博主学Go语言是为了Web编程,所以博主会先记录Go这门语言,然后再记录Web编程。所以你想使用Go做桌面软件,这些可能不适合你。
该系列博文的内容大都来自《Go语言编程》和 《Go Web编程》。
语言简史
Limbo语言被认为是Go语言的前身,不仅仅因为是同一批人设计的语言,而是Go语言确实从 Limbo语言中继承了众多优秀的特性。
Go语言的第一个版本在2009年11月正式对外发布,并在此后的两年内快速迭代,发展迅猛。第一个正式版本的Go语言于2012年3月28日正式发布,让Go语言迎来了第一个引人瞩目的里程碑。
语言特性
Go语言最主要的特性:
- 自动垃圾回收
- 更丰富的内置类型
- 函数多返回值
- 错误处理
- 匿名函数和闭包
- 类型和接口
- 并发编程
- 反射
- 语言交互性
这些特性会在后面的学习中了解到。
第一个Go程序
package main
import "fmt"// 我们需要使用fmt包中的Println()函数
func main() {
fmt.Println("Hello, world. 你好,世界!")
}
每个Go源代码文件的开头都是一个package声明,表示该Go代码所属的包。包是Go语言里最基本的分发单位,也是工程管理中依赖关系的体现。要生成Go可执行程序,必须建立一个名字为main的包,并且在该包中包含一个叫main()的函数(该函数是Go可执行程序的执行起点)。
Go语言的main()函数不能带参数,也不能定义返回值。命令行传入的参数在os.Args变量中保存。如果需要支持命令行开关,可使用flag包。在本书后面我们将解释如何使用flag包来做命令行参数规范的定义,以及获取和解析命令行参数。
在包声明之后,是一系列的import语句,用于导入该程序所依赖的包。由于本示例程序用到了Println()函数,所以需要导入该函数所属的fmt包。
有一点需要注意,不得包含在源代码文件中没有用到的包,否则Go编译器会报编译错误、这与下面提到的强制左花括号{的放置位置以及之后会提到的函数名的大小写规则,均体现了Go语言在语言层面解决软件工程问题的设计哲学。
所有Go函数(包括在对象编程中会提到的类型成员函数)以关键字func开头。一个常规的函数定义包含以下部分:
func 函数名(参数列表)(返回值列表) {
// 函数体
}
对应的一个实例如下:
func Compute(value1 int, value2 float64)(result float64, err error) {
// 函数体
}
Go支持多个返回值。以上的示例函数Compute()返回了两个值,一个叫result,另一个是err。并不是所有返回值都必须赋值。在函数返回时没有被明确赋值的返回值都会被设置为默认值,比如result会被设为0.0,err会被设为nil。
代码注释:
/*
块注释
*/
// 行注释
Go程序并不要求开发者在每个语句后面加上分号表示语句结束。有些读者可能会自然地把左花括号{另起一行放置,这样做的结果是Go编译器报告编译错误,这点需要特别注意:
syntax error: unexpected semicolon or newline before {
开发工具
Eclipse+Goclipse、Sublime Text2、VIM、LiteIDE、Gedit、IntelliJ IDEA。开发工具的选择完全个人爱好,可自行选择。