基本信息
编辑推荐
1. 全面介绍Go语言基础编程。本书通过5个章节详细地介绍了Go的语言细节和底层实现细节,贯穿于语言层面和源码层面,让读者可以对Go语言的实现有更加深刻的理解。
2. 直击Go语言的精髓和最大亮点——并发编程技术。本书最大的看点和特色在于并发编程。本书深入剖析了并发编程模型及其在多个编程实战中的应用,重点阐述了Go语言并发编程模型和机制,详细介绍了Go并发编程的核心要素——Goroutine和Channel的概念、原理、基本用法和高级技巧应用,以及编写并发程序的过程中对各种同步工具的运用等问题。
3. 示例全面详细。本书展示和细致讲解了各种各样的代码实例,尤其是包含了像载荷发生器和网络爬虫框架这样的实用程序,让读者可以对并发、线程、信号等概念有清晰的理解。
内容简介
作译者
目录
第一部分 Go语言的世界
第1章 初识Go语言 2
1.1 Go语言特性一瞥 2
1.2 Go语言的优劣 3
1.3 怎样学习Go语言 4
1.4 本章小结 5
第2章 Go语言环境搭建 6
2.1 安装和设置 6
2.1.1 Linux 6
2.1.2 Windows 9
2.2 工程结构 10
2.2.1 工作区 10
2.2.2 GOPATH 11
2.2.3 源码文件 11
2.2.4 代码包 14
2.3 标准命令概述 17
2.4 本章小结 18
第二部分 编程基础
第3章 词法与数据类型 20
前言
Go编程语言(或称Golang,以下简称Go语言)是云计算时代的C语言。它的诞生是为了让程序员有更高的生产效率,并让程序在有并行计算支持的环境下更快速地运行。2009年11月10日,Go语言正式成为开源编程语言大家庭的一员。在本书截稿之时,它的最新版本是1.3。因此,本书的内容和相关代码将会围绕Go语言的1.3版本展开。
这里所说的开源是指开放源代码。开源不仅仅意味着分享和免费。对于软件开发人员来讲,它更多的是代表着一种协同工作的方式。它可以使不同公司、不同城市甚至不同国家的技术爱好者们聚集起来,以共同分享和使用源代码的方式协同完成一个任务或目标。开源的意义并不在于目标大小,而在于对某个技术领域、某个应用行业甚至整个产业的启示和推动力。开源的编程语言会更多、更好地凝聚众人的力量,并使它更快地奔向成功。
Go语言每半年就会发布一个大版本升级(比如从1.1升级到1.2、从1.2升级到1.3,等等)。这样的更新速度是很多其他编程语言望尘莫及的。其中,开源无疑起到了很大的推动作用。
Go语言虽然在2009年才真正成为开源编程语言,在2012年才发布第一个正式版——1.0版本,但是它很早就进入了中国软件开发者的视野。这不单单是因为它是由几位教父级软件开发先驱开发、由Google公司发布的开源编程语言,更是因为它是一门拥有诸多先进特性、拥有高性能和生产效率、为云计算时代和软件工程而生的多范式编程语言。Go语言虽然年轻,但已经足以用于软件生产。
目前来看,Go语言在中国发展的最大不足就是其开源社区非常松散,爱好者不论是在地理位置上还是在互联网络中都比较分散。当然,这也是由于Go语言的年轻所导致的。目前,在中国没有一个可以主导语言爱好者学习和交流的Go语言社区,语言爱好者的数量也相对较少。它不像Python那样,在中国有一个统一的、分支众多的语言爱好者联盟,Python语言爱好者可以很轻易地找到志同道合的组织和同行,并积极地进行分享和交流。Go语言在这方面有所缺失的很大一部分原因是在中国使用Go语言的软件开发者太少。因此,我非常希望能通过本书使更多的同行了解和使用Go语言,并用它来创造更多的价值。我也希望大家能够协力共建中国的Go语言技术社区。
通过本书,我会带领大家进入Go语言的世界,领略Go语言的魅力,为大家打开一扇门,也力求使大家对使用Go语言开发软件产生更多的兴趣。
本书结构
本书共分为四个部分。
第一部分,将会带领你进入Go语言的世界,让你对Go语言有个基本的了解,这一部分包含两章。
第1章,会简要介绍Go语言为大家带来的优秀特性和新鲜活力,以及与其他主流编程语言相比的优缺点。
第2章,将对编写和运行Go语言程序所需的所有前期工作进行说明。这包括安装和配置方法、工程结构以及标准命令。通过对这些知识的学习和实践,相信读者就可以为编写Go代码和建立Go项目做好准备了。
第二部分,会详细阐述Go语言的基础编程知识,这一部分包含了3章。
第3章,首先会介绍Go语言中的关键字、运算符、类型、表达式等最基本的概念。掌握这些知识,读者可以了解到Go语言在代码构建方面的言简意赅。然后,展示Go语言基本数据结构及其主要操作方法和技巧。Go语言的基本数据结构的操作方式是非常脚本化的,使用起来也非常简单和方便。最后,我将加入一些相对高级一点的主题,比如基本数据结构的初始化方式、可比性与有序性,以及类型转换方式等,从中我们会看到Go语言的设计者们在灵活性和简洁性之间做出的取舍。
第4章,我们一起来学习Go语言的流程控制方法。这些方法已经足以体现出Go语言的先进和强大(当然,我们在后面还会看到更棒的特性)。这一章不但会介绍Go语言中基本的逻辑控制方法,还会深入阐述Go语言特有的程序编写方式,以及这些特有方式所体现出的Go语言程序设计哲学。
第5章,将详细介绍Go语言程序的测试和文档的编写。
第三部分,将集中笔墨讲解Go语言中最强悍的部分——并发编程的概念和知识,这一部分同样包含了3章的内容。
第6章,先简要介绍与多进程编程和多线程编程有关的知识。这些知识会作为理解Go语言并发编程模型的先导内容展现给大家。看过以后,大家应该可以对并发编程有一个比较清晰的理解。同时,还会指出以内存共享为基础的并发编程方式所带来的一些问题。最后,通过剖析多核时代(基于多CPU核心的计算时代)的并发编程需求,引出Go语言先进的并发编程模型。大家会看到Go语言为之做出的努力。
第7章,会向大家展示Go特有的编程要素——Goroutine(也可称为Go程)的魅力。这一章不但会介绍怎样利用Goroutine编写可并发运行的程序,还会深入阐述Goroutine背后的运作机理和执行过程,使读者知其然更知其所以然。此外,还会介绍标准库的runtime代码包中与Goroutine相关的一些API。这一章的另一个重点是对Go语言并发编程中不可或缺的部分——Channel的介绍。Channel与Goroutine堪称绝配,它的用法相当灵活。这一章在介绍了Channel的基本概念和使用规则之后,还会介绍多种Channel的实际用法,并通过丰富的示例来说明每种使用方法和技巧。最后,还描述了标准库的time代码包中的API是如何通过Channel来实现其强大功能的。
第8章,将是对Go语言提供的传统同步和互斥方法的介绍。这包括锁、条件变量、原子操作、WaitGroup、临时对象池,等等。这些同步方法的提供者大都是标准库的sync代码包。虽然Go语言官方并不推荐使用这些方式来控制和协调Go语言编写的并发程序,但不容忽视的是,它们确实在一些应用场景中是简单有效的。
序言
郝林的《Go并发编程实战》一书不仅清楚地解释了Go语言的各个知识点,而且包含了很多案例和高层次的解读,还阐述了很多软件工程方面的设计和开发技巧。这本书最大的看点在于并发编程,这也是Go语言最大的特色。作者花了大量篇幅详细介绍了Go并发编程的核心要素——
Goroutine和Channel的概念、原理、基本用法和高级技巧,以及编写并发程序的过程中对各种同步工具的运用等问题。在讲述这些知识的过程中,作者还展示和细致讲解了各种各样的代码实例,尤其是包含了像载荷发生器和网络爬虫框架这样的实用程序。这对读者真正理解上述知识点是非常有帮助的。从基础知识到高级应用,再到实战,作者如此缜密的构思真是完美啊。这本书不仅让你知其然,而且还让你知其所以然。在我通读全书之后,不禁感慨作者的阐述是如此地全面和夯实。因此,这本书不仅适合新手入门Go语言,而且让我们这样有几年Go语言编程经验的读者也受益匪浅。
这本书围绕着并发编程做了大量的介绍,但前几章的编程基础也介绍得相当详细。我们知道,Go语言的语法很简洁,关键字只有25个,但是表达能力超强。作者通过5个章节把Go语言的语言细节介绍得非常清楚,而且还介绍了很多底层的实现细节,贯穿于语言层面和源码层面,从而让读者对Go语言的实现有更加深刻的理解。我们学习的过程一般都是先进行基础知识的学习,接着开始动手写代码。这本书就是按这样的顺序编写的,从知识学习到实战应用的构思非常好,也让我学习到了很多知识,非常感谢作者能写出这样的一本书来。如果在三年前就有这样一本书的话,我相信在它的帮助下我可以更加深入地理解Go语言,而不需要天天深埋在源码中,研究各种设计思路和语言细节,这样也许我就有更多时间去写出更多的开源项目。作为一名Go语言程序员,我们需要不断地深入学习Go的各种细节,这样才能使用它编写出正确和高效的程序。而此书对于Go语言细节的讲解非常透彻,还通过各种实例演示了其使用方法及开发技巧。这是一本深度和广度俱佳的Go语言的实战图书。我在此郑重推荐给每一位学习Go语言的读者。建议读者不仅要细读这本书,而且还要深入理解作者给出的一些实例,这样才能掌握Go语言的设计思想。
最后,感谢郝林邀请我写作这篇推荐序,能够为这样一本书写序,是我莫大的荣幸。
谢孟军
2014年10月20日
媒体评论
——许式伟,七牛云存储CEO
“Go语言作为优秀的开源编程语言,已逐渐成为云计算时代的必学语言之一。《Go并发编程实战》不但对基本的Go语言编程方法和技巧进行了深入的阐释,还独树一帜地对Go语言的内部机制和原理进行了清晰的描述。这些都是学好和用好Go语言的极佳资料。推荐Go语言爱好者以及对Go语言感兴趣的技术人员都阅读这本书。”
——杜玉杰,中国OpenStack社区(COSUG)发起人,OpenStack基金会董事,
企业级云计算联盟(ECA)副秘书长
“Go语言是服务端编程领域非常热门的语言,市面上关于Go语言的图书并不少见,但都没有像《Go并发编程实战》这样,把Go语言最精髓的部分——并发编程讲解得如此深入浅出,明白透彻。本书系统地梳理了并发编程的概念和原理,并辅以详细的Go语言程序示例,非常容易让读者对并发、线程、信号等概念有清晰的理解。不管你是第一次接触Go语言,还是已经非常熟悉它了,如果想了解Go语言更多的技术内幕,这本书都值得仔细研读,相信读者能够从中受益匪浅。”
——郭理靖,京东云平台开放云事业部总监
“Go语言从诞生之日起就充满了争议,但是社区对它的热情却越来越高,今年InfoWorld最佳的开源项目Docker就是用Go写的,可见Go闪烁着越来越耀眼的光芒。郝林的这本书非常注重对Go编程细节的清晰阐释,这在国内原创技术书中是不多见的。书中示例选取精心得当,深入浅出,完全没有那种看完仍需要参悟的感觉。这是一本Go学习者真正需要的图书。”
——程显峰,蓝海讯通COO,《MongoDB权威指南》译者
“Go语言之所以被称为21世纪的C语言,不仅在于它精简的语法和高效的开发,更在于它具有原生支持和易于使用的高并发的特性。而越是简单的技术就越能够生成千变万化的组合,想要用到极致,需要对它有深刻的见解。在《Go并发编程实战》一书中,作者由浅入深地对Go并发技术进行了剖析,并辅以翔实的案例,让读者真正了解和掌握Go并发编程,成为多核时代和云计算时代的开发尖兵。”
——陈佳桦,Go语言签约讲师,Gogs项目创始人
书摘
很高兴你能选择这本书。希望这本书能够让你成为Go粉。很多Go语言爱好者都喜欢称自己是Gopher。
Go编程语言(或称Golang,以下简称Go语言)是云计算时代的C语言。它的诞生是为了让程序员有更高的生产效率,并让程序在有并行计算支持的环境下更快速地运行。2009年11月10日,Go语言正式成为开源编程语言大家庭的一员。在本书截稿之时,它的最新版本是1.3。因此,本书的内容和相关代码将会围绕Go语言的1.3版本展开。
这里所说的开源是指开放源代码。开源不仅仅意味着分享和免费。对于软件开发人员来讲,它更多的是代表着一种协同工作的方式。它可以使不同公司、不同城市甚至不同国家的技术爱好者们聚集起来,以共同分享和使用源代码的方式协同完成一个任务或目标。开源的意义并不在于目标大小,而在于对某个技术领域、某个应用行业甚至整个产业的启示和推动力。开源的编程语言会更多、更好地凝聚众人的力量,并使它更快地奔向成功。
Go语言每半年就会发布一个大版本升级(比如从1.1升级到1.2、从1.2升级到1.3,等等)。这样的更新速度是很多其他编程语言望尘莫及的。其中,开源无疑起到了很大的推动作用。
Go语言虽然在2009年才真正成为开源编程语言,在2012年才发布第一个正式版——1.0版本,但是它很早就进入了中国软件开发者的视野。这不单单是因为它是由几位教父级软件开发先驱开发、由Google公司发布的开源编程语言,更是因为它是一门拥有诸多先进特性、拥有高性能和生产效率、为云计算时代和软件工程而生的多范式编程语言。Go语言虽然年轻,但已经足以用于软件生产。
目前来看,Go语言在中国发展的最大不足就是其开源社区非常松散,爱好者不论是在地理位置上还是在互联网络中都比较分散。当然,这也是由于Go语言的年轻所导致的。目前,在中国没有一个可以主导语言爱好者学习和交流的Go语言社区,语言爱好者的数量也相对较少。它不像Python那样,在中国有一个统一的、分支众多的语言爱好者联盟,Python语言爱好者可以很轻易地找到志同道合的组织和同行,并积极地进行分享和交流。Go语言在这方面有所缺失的很大一部分原因是在中国使用Go语言的软件开发者太少。因此,我非常希望能通过本书使更多的同行了解和使用Go语言,并用它来创造更多的价值。我也希望大家能够协力共建中国的Go语言技术社区。
通过本书,我会带领大家进入Go语言的世界,领略Go语言的魅力,为大家打开一扇门,也力求使大家对使用Go语言开发软件产生更多的兴趣。
本书结构
本书共分为四个部分。
第一部分,将会带领你进入Go语言的世界,让你对Go语言有个基本的了解,这一部分包含两章。
第1章,会简要介绍Go语言为大家带来的优秀特性和新鲜活力,以及与其他主流编程语言相比的优缺点。
第2章,将对编写和运行Go语言程序所需的所有前期工作进行说明。这包括安装和配置方法、工程结构以及标准命令。通过对这些知识的学习和实践,相信读者就可以为编写Go代码和建立Go项目做好准备了。
第二部分,会详细阐述Go语言的基础编程知识,这一部分包含了3章。
第3章,首先会介绍Go语言中的关键字、运算符、类型、表达式等最基本的概念。掌握这些知识,读者可以了解到Go语言在代码构建方面的言简意赅。然后,展示Go语言基本数据结构及其主要操作方法和技巧。Go语言的基本数据结构的操作方式是非常脚本化的,使用起来也非常简单和方便。最后,我将加入一些相对高级一点的主题,比如基本数据结构的初始化方式、可比性与有序性,以及类型转换方式等,从中我们会看到Go语言的设计者们在灵活性和简洁性之间做出的取舍。
第4章,我们一起来学习Go语言的流程控制方法。这些方法已经足以体现出Go语言的先进和强大(当然,我们在后面还会看到更棒的特性)。这一章不但会介绍Go语言中基本的逻辑控制方法,还会深入阐述Go语言特有的程序编写方式,以及这些特有方式所体现出的Go语言程序设计哲学。
第5章,将详细介绍Go语言程序的测试和文档的编写。
第三部分,将集中笔墨讲解Go语言中最强悍的部分——并发编程的概念和知识,这一部分同样包含了3章的内容。
第6章,先简要介绍与多进程编程和多线程编程有关的知识。这些知识会作为理解Go语言并发编程模型的先导内容展现给大家。看过以后,大家应该可以对并发编程有一个比较清晰的理解。同时,还会指出以内存共享为基础的并发编程方式所带来的一些问题。最后,通过剖析多核时代(基于多CPU核心的计算时代)的并发编程需求,引出Go语言先进的并发编程模型。大家会看到Go语言为之做出的努力。
第7章,会向大家展示Go特有的编程要素——Goroutine(也可称为Go程)的魅力。这一章不但会介绍怎样利用Goroutine编写可并发运行的程序,还会深入阐述Goroutine背后的运作机理和执行过程,使读者知其然更知其所以然。此外,还会介绍标准库的runtime代码包中与Goroutine相关的一些API。这一章的另一个重点是对Go语言并发编程中不可或缺的部分——Channel的介绍。Channel与Goroutine堪称绝配,它的用法相当灵活。这一章在介绍了Channel的基本概念和使用规则之后,还会介绍多种Channel的实际用法,并通过丰富的示例来说明每种使用方法和技巧。最后,还描述了标准库的time代码包中的API是如何通过Channel来实现其强大功能的。