1.1.1 简介
Go(又称Golang)是Google的Robert Griesemer,Rob Pike及Ken Thompson开发的一种计算机编程语言
1.1.2 设计初衷
Go是一种编译型语言,可以进行快速开发,解决c/c++项目太慢 内存泄漏等问题。有着很强的并发能力以及极低的内存消耗。
1.1.3 应用领域
1.Go服务器端/游戏软件工程师
2.Go分布式/云计算软件工程师
3.区块链工程师
Go特别适合应用在需要高并发的场景
Go 语言出现的目的是希望在编程领域创造最实用的方式来进行软件开发。它并不是要用奇怪的语法和晦涩难懂的概念来从根本上推翻已有的编程语言,而是建立并改善了 C、Java、C# 中的许多语法风格。它提倡通过接口来针对面向对象编程,通过 goroutine 和 channel 来支持并发和并行编程。
1.1.4 说明
第 18 章可以作为你在开发时的一个参考手册,因为当中包含了众多的有价值的代码片段以及相关的解释说明。
最后要说明的是,书中所有的代码都在 Go1.4 版本下测试通过。
Go 语言的官方网站是 golang.org,这个站点采用 Python 作为前端,并且使用 Go 语言自带的工具 godoc 运行在 Google App Engine 上来作为 Web 服务器提供文本内容。在官网的首页有一个功能叫做 Go Playground,是一个 Go 代码的简单编辑器的沙盒,它可以在没有安装 Go 语言的情况下在你的浏览器中编译并运行 Go,它提供了一些示例,其中包括国际惯例 “Hello, World!”。
更多的信息详见 github.com/golang/go,Go 项目 Bug 追踪和功能预期详见 github.com/golang/go/issues。
go-lang.cat-v.org/ 是 Go 语言开发社区的资源站,irc.freenode.net 的#go-nuts 是官方的 Go IRC 频道。
@golang 是 Go 语言在 Twitter 的官方帐号,大家一般使用 #golang 作为话题标签。
这里还有一个在 Linked-in 的小组:www.linkedin.com/groups?gid=2524765&trk=myg_ugrp_ovr。
Go 编程语言的维基百科:en.wikipedia.org/wiki/Go_(programming_language)
Go 语言相关资源的搜索引擎页面:gowalker.org
Go 语言还有一个运行在 Google App Engine 上的 Go Tour,你也可以通过执行命令 go install go-tour.googlecode.com/hg/gotour
安装到你的本地机器上。对于中文读者,可以访问该指南的 中文版本,或通过命令 go install https://bitbucket.org/mikespook/go-tour-zh/gotour
进行安装。
1.1.5 Go语言的发展目标
Go 语言是一门类型安全和内存安全的编程语言。虽然 Go 语言中仍有指针的存在,但并不允许进行指针运算。
Go 语言的另一个目标是对于网络通信、并发和并行编程的极佳支持,从而更好地利用大量的分布式和多核的计算机。设计者通过 goroutine 这种轻量级线程的概念来实现这个目标,然后通过 channel 来实现各个 goroutine 之间的通信。他们实现了分段栈增长和 goroutine 在线程基础上多路复用技术的自动化。
Go 语言中另一个非常重要的特性就是它的构建速度(编译和链接到机器代码的速度),一般情况下构建一个程序的时间只需要数百毫秒到几秒
Go 语言还能够在运行时进行反射相关的操作。
使用 go install
能够很轻松地对第三方包进行部署。
此外,Go 语言还支持调用由 C 语言编写的海量库文件(第 3.9 节),从而能够将过去开发的软件进行快速迁移。
1.1.6 指导设计原则
Go语言通过减少关键字的数量(25 个)来简化编码过程中的混乱和复杂度。
Go 语言有一套完整的编码规范,你可以在 Go 语言编码规范 页面进行查看。作为一门具有明确编码规范的语言,它要求可以采用不同的编译器如 gc 和 gccgo(第 2.1 节)进行编译工作,这对语言本身拥有更好的编码规范起到很大帮助。
LALR 是 Go 语言的语法标准,你也可以在 src/cmd/internal/gc/go.y
中查看到,这种语法标准在编译时不需要符号表来协助解析。
1.1.7 语言的特性
因为 Go 语言没有类和继承的概念,所以它和 Java 或 C++ 看起来并不相同。但是它通过接口(interface)的概念来实现多态性。Go 语言有一个清晰易懂的轻量级类型系统,在类型之间也没有层级之说。因此可以说这是一门混合型的语言。
函数是 Go 语言中的基本构件,它们的使用方法非常灵活。
Go 语言使用静态类型,所以它是类型安全的一门语言,加上通过构建到本地代码,程序的执行速度也非常快。
作为强类型语言,隐式的类型转换是不被允许的,记住一条原则:让所有的东西都是显式的。
Go 语言其实也有一些动态语言的特性(通过关键字 var
),所以它对那些逃离 Java 和 .Net 世界而使用 Python、Ruby、PHP 和 JavaScript 的开发者们也具有很大的吸引力。
Go 语言支持交叉编译,比如说你可以在运行 Linux 系统的计算机上开发运行下 Windows 下运行的应用程序。这是第一门完全支持 UTF-8 的编程语言,这不仅体现在它可以处理使用 UTF-8 编码的字符串,就连它的源码文件格式都是使用的 UTF-8 编码。Go 语言做到了真正的国际化!
1.1.8 特性缺失
-
为了简化设计,不支持函数重载和操作符重载
-
为了避免在 C/C++ 开发中的一些 Bug 和混乱,不支持隐式转换
-
Go 语言通过另一种途径实现面向对象设计(第 10-11 章)来放弃类和类型的继承
-
尽管在接口的使用方面(第 11 章)可以实现类似变体类型的功能,但本身不支持变体类型
-
不支持动态加载代码
-
不支持动态链接库
-
不支持泛型
-
通过
recover
和panic
来替代异常机制(第 13.2-3 节) -
不支持断言
-
不支持静态变量
1.1.9 小结
这里列举一些 Go 语言的必杀技:
- 简化问题,易于学习
- 内存管理,简洁语法,易于使用
- 快速编译,高效开发
- 高效执行
- 并发支持,轻松驾驭
- 静态类型
- 标准类库,规范统一
- 易于部署
- 文档全面
- 免费开源