首页>参考读物>计算机科学与技术>软件与程序设计

Go语言从入门到进阶实战(视频教学版)
作者 : 徐波 编著
出版日期 : 2018-05-23
ISBN : 978-7-111-59824-4
定价 : 99.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 420
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

本书采用“理论+实例”的形式编写,通过大量的实例,结合作者多年的一线开发实战经验,全面介绍了Go语言的语法及使用方法。本书作者特意为本书精心录制了详细的配套教学视频,这将极大地提升读者的学习效率。本书分为13章,主要介绍了Go语言的特性与环境搭建、基本语法与使用、容器(存储和组织数据的方式)、流程控制、函数、结构体、接口(interface)、包(package)、并发、反射、编译与工具、开发技巧,最后的实战演练部分剖析了作者的开源网络库cellnet的架构及设计思想,并且实现了Socket聊天功能。本书对于Go语言的特色功能并发有全面、深入的讲解,需要读者重点学习。本书特别适合Go语言初学者入门和进阶阅读。另外,本书也适合社会培训学校作为教材使用,还适合大中专院校的相关专业作为教学参考书。

图书特色

n

图书前言

  现今,多核CPU已经成为服务器的标配。但是对多核的运算能力挖掘一直由程序员人工设计算法及框架来完成。这个过程需要开发人员具有一定的并发设计及框架设计能力。虽然一些编程语言的框架在不断地提高多核资源使用效率,如Java的Netty等,但仍然需要开发人员花费大量的时间和精力搞懂这些框架的运行原理后才能熟练掌握。
  Go语言在多核并发上拥有原生的设计优势。Go语言从2009年11月开源,2012年发布Go 1.0稳定版本以来,已经拥有活跃的社区和全球众多开发者,并且与苹果公司的Swift一样,成为当前非常流行的开发语言之一。很多公司,特别是中国的互联网公司,即将或者已经完成了使用Go语言改造旧系统的过程。经过Go语言重构的系统能使用更少的硬件资源而有更高的并发和I/O吞吐表现。
  Go语言简单易学,学习曲线平缓,不需要像C/C++语言动辄需要两到三年的学习期。Go语言被称为“互联网时代的C语言”。互联网的短、频、快特性在Go语言中体现得淋漓尽致。一个熟练的开发者只需要短短的一周时间就可以从学习阶段转到开发阶段,并完成一个高并发的服务器开发。
  面对Go语言的普及和学习热潮,本书使用浅显易懂的语言,介绍了GO语言从基础的语法知识到并发和接口等新特性知识,从而带领读者迅速熟悉这门新时代的编程语言。
本书特色
  1. 提供同步配套的教学视频
  为了让读者更好地学习本书,作者为书中的重点内容录制了配套教学视频,借助这些视频,读者可以更轻松地学习。
  作者曾经为慕课网的专业视频制作提供指导,并在慕课网做过多期Go语言、Unity 3D游戏引擎和Cocos游戏引擎等网络教学培训,受到众多开发者的青睐及好评。希望读者能够通过作者录制的视频轻松地学习Go语言。
  2. 来自一线的开发经验及实战例子
  本书中的大多数例子及代码都来自于作者多年的口述教学和技术分享会等实践,受到了众多开发者的一致好评。同时,作者本人也是一名开源爱好者,编写了业内著名的cellnet网络库。本书将为读者介绍cellnet的架构和设计思想,以帮助读者剖析cellnet内部的运行机制,从而让读者能方便地使用cellnet快速实现业务逻辑。
  3. 浅显易懂的语言、触类旁通的讲解、循序渐进的知识体系
  本书在内容编排上尽量做到通俗易懂;在讲解一些常见编程语言特性时,将Go语言和其他多种语言的特性进行对比,让掌握多种编程语言的开发者能迅速理解Go语言的特性。无论是初学者,还是久经“沙场”的老程序员,都能通过本书快速学习Go语言的精华。
  4. 内容全面,实用性强
  本书详细介绍了作者精心挑选的多个实用性很强的例子,如JSON串行化、有限状态机(FSM)、TCP粘包处理、Echo服务器和事件系统等。读者既可以从例子中学习并理解Go语言的知识点,还可以将这些例子应用于实际开发中。
本书内容
  第1章 初识Go语言
  本章主要介绍了以下内容:
  (1)Go语言的特性;
  (2)使用Go语言的开源项目;
  (3)安装Go语言开发包和搭建其开发环境。
  第2章 Go语言基本语法与使用
  本章主要介绍了Go语言的基本语法,如变量、各种常见数据类型及常量,此外还介绍了Go 1.9版本中新添加的特性,即类型别名。
  第3章 容器:存储和组织数据的方式
  本章介绍了Go语言编程算法中常用的容器,如数组、切片、映射,以及列表的创建、设置、获取、查询和遍历等操作。
  第4章 流程控制
  本章主要介绍了常见的条件判断、循环和分支语句,包括以下内容:
  (1)条件判断(if);
  (2)条件循环(for);
  (3)键值循环(for range);
  (4)分支选择(switch);
  (5)跳转语句(goto);
  (6)跳出循环(break)和继续循环(continue)。
  第5章 函数(function)
  本章首先介绍了Go语言中较为基础的函数声明格式及命名返回值特性;然后介绍了Go语言中较为灵活的特性,即函数变量和匿名函数;还介绍了一个展示操作与数据分离的示例:字符串的链式处理,从而引出函数闭包概念;之后介绍了Go语言中最具特色的如下几个功能:
  (1)延迟执行语句(defer)——将语句延迟到函数退出时执行;
  (2)宕机(panic)——终止程序运行;
  (3)宕机恢复(recover)——让程序从宕机中恢复。
  第6章 结构体(struct)
  本章介绍了Go语言中最重要的概念:结构体。首先讲解了结构体多种灵活的实例化和成员初始化方法;接着使用面向对象和面向过程等思想,逐步介绍了Go语言中的方法及新的概念接收器;然后使用游戏中经典的位置移动例子,展现了结构体的实际使用方法;最后,使用大量例子介绍了结构体内嵌和类型内嵌内容,并在JSON数据的分离实例中体验Go语言的内嵌结构体的强大功能。
  本章中的经典例子:使用事件系统实现事件的响应和处理——展现Go语言的方法与函数的统一调用过程。
  第7章 接口(interface)
  本章介绍了Go语言接口的如下几个知识点:
  (1)声明接口;
  (2)实现接口的条件;
  (3)接口的嵌套组合;
  (4)接口的转换;
  (5)接口类型断言和类型分支——判断接口的类型;
  (6)空接口。
  本章中涉及的例子有:便于扩展输出方式的日志系统;使用接口进行数据的排序;使用空接口实现可以保存任意值的字典及实现有限状态机(FSM)等。
  第8章 包(package)
  本章首先介绍了构建工程的基础概念GOPATH,接着介绍了包(package)的创建和导入过程与方法,以及能控制访问权限的导出包内标识符的方法。
  本章给出了一个典型的工厂模式自动注册示例,介绍了多个包的定义和使用方法。
  第9章 并发
  本章讲解了Go语言中并发的两个重要概念:轻量级线程(goroutine)和通道(channel)。首先介绍了goroutine的创建方法及一些和并发相关的概念,便于读者理解goroutine和线程的区别与联系;然后介绍了通道的声明、创建和使用方法,使用3个示例,即模拟远程过程调用(RPC)、使用通道响应计时器事件和Telnet回音服务器,来展示通道的实际使用方法;最后介绍了在并发环境下的同步处理方法,如使用互斥锁和等待组等,以及使用竞态检测提前发现并发问题。
  第10章 反射
  本章按照反射的类别分为两部分:反射类型对象(reflect.Type)和反射值对象(reflect.Value)。首先介绍了反射类型的获取及遍历方法,同时介绍了反射类型对象获取结构体标签的方法;接着介绍了反射值对象获取及修改值和遍历值等;最后通过使用反射将结构体串行化为JSON格式字符串的示例,介绍了反射在实际中的运用。
  第11章 编译与工具
  本章介绍了Go语言中常用的编译及工具指令,例如:
  (1)go build/go install——编译及安装源码;
  (2)go get——远程获取并安装源码;
  (3)go test——单元测试和基准测试框架;
  (4)go pprof——性能分析工具。
  第12章 “避坑”与技巧
  本章首先介绍了作者多年使用Go语言的开发经验和技巧总结,以及一些使用Go语言中可能发生的错误及优化建议,例如合理使用并发、在性能与灵活性中做出取舍后再使用反射等;接着介绍了Go语言中一个不为人知的特性——map的多键索引,利用该特性可以方便地对数据进行多个条件的索引;最后介绍了使用Go语言的Socket处理TCP粘包问题。
  第13章 实战演练——剖析cellnet网络库设计并实现Socket聊天功能
  本章介绍了cellnet网络库的基本特性、流程、架构及如下几个关键概念:
  (1)连接管理;
  (2)会话收发数据流程;
  (3)事件队列;
  (4)消息编码;
  (5)消息元信息;
  (6)接收和发送封包。
  本章使用cellnet网络库实现了带有聊天功能的客户端和服务器。
本书读者对象
* Go语言初学者;
* Go语言进阶读者;
* 编程初学者;
* 后端程序初学者;
* 前端转后端的开发人员;
* 熟悉C/C++、Java和C#语言,想了解和学习Go语言的编程爱好者;
* 想用Go语言快速学习编写服务器端程序的开发者;
* 相关培训学员;
* 各大院校的学生。
关于作者
  本书由徐波编写,郭聪和张锐参与审核和校对。感谢我的妻子和家人在我写书期间的大力支持。
  另外,在本书编写期间,得到了吴宏伟先生的耐心指导,他一丝不苟、细致入微地对书稿进行了审核和校对,这让本书的条理更加清晰,语言更加通俗易懂。在此表示深深的感谢!
  虽然我们对书中所述内容都尽量核实,并多次进行了文字校对,但因时间所限,加之水平所限,书中的疏漏和错误在所难免,敬请广大读者批评指正。联系我们请发E-mail到hzbook2017@163.com。
  
  徐波

上架指导

计算机\程序设计

封底文字

Go语言从入门到进阶实战(视频教学版)
徐波 编著
书号:978-7-111-59824-4
印张:26.25(420页)
书脊:19mm
定价:99.00元
成品尺寸:186*240mm
印数:3500册
上架:计算机/Go语言

-----------------------------------------------------------------------------
广告语:

5位大咖力荐!资深程序员、慕课网讲师多年Go经验总结与分享!详解Go语法及开发技巧,深度剖析开源网络库cellnet的设计架构,100分钟配套教学视频,72个开发实例精讲,大量避坑技巧让你少走弯路


编辑推荐:

资深程序员、慕课网特邀讲师分享多年的Go语言开发经验
详解Go语法及开发技巧,深度剖析开源网络库cellnet的设计和架构思想
100分钟配套教学视频、72个开发实例精讲
用浅显易懂的语言讲解,不让读者有云山雾罩的感觉
用大量实例带领读者学习,让读者在实际动手中提高编程水平
给出了大量的“避坑”技巧,让读者在实际开发中少走弯路
实例来自于作者多年的口述教学和技术分享会,广受业界好评
每个实例程序都精心设计,让Go语言学习者大呼过瘾


本书精华内容
初识Go语言
Go语言基本语法与使用
容器:存储和组织数据的方式
流程控制
函数(function)
结构体(struct)
接口(interface)
包(package)
并发
反射
编译与工具
“避坑”与技巧
实战演练——剖析cellnet网络库设计并实现Socket聊天功能

-----------------------------------------------------------------------------------
作者简介

徐波 资深全栈游戏开发者,慕课网特邀讲师,开源爱好者,Gopher之一。游戏行业从业十余年。曾就职于著名的网络游戏公司Possibility Space,与暴雪星际争霸程序Gage Galinger和美术界知名原画师朱峰(变形金刚电影版红蜘蛛设计者)一起开发了大型3D暗黑系魔幻网游Warrior Epic。业界最早实现了微端Download On Demand技术。2009年开设战魂小筑博客。2012年开始使用Go语言,并在GitHub上发布了cellnet网络库及tabtoy导表工具,深受业界赞誉。作为慕课网特邀讲师,制作了多个技术视频,讲授Go语言、Cocos和Unity等课程,广受学员好评。

-------------------------------------------------------------------------------------------
内容简介:

本书采用“理论+实例”的编写形式,通过大量的实例,并结合作者多年的一线开发实战经验,全面介绍了Go语言的语法及使用方法。全书秉承方便学习、易于理解、便于查询的理念编写而成,无论是想系统学习Go语言基础知识的初学者,还是想进阶提高的有经验开发人员,都能通过本书迅速掌握Go语言的各种基础语法和开发技巧。本书作者曾经与慕课网合作录制过相关视频课程,有丰富的视频制作经验,所以特意为本书重点内容精心录制了配套教学视频,这将极大地提升读者的学习效率,取得比同类图书更好的学习效果。另外,本书还免费提供了书中涉及的实例源代码,以方便读者学习。
本书分为13章,主要介绍了Go语言的特性与环境搭建、基本语法与使用、容器(存储和组织数据的方式)、流程控制、函数、结构体、接口、包、并发、反射、编译与工具、Go程序开发技巧;最后的实战演练部分剖析了作者的开源网络库cellnet的架构及设计思想,并且实现了Socket聊天功能。本书对于Go语言的并发特色功能有全面、深入的讲解,需要读者重点学习。
本书结构清晰,内容通俗易懂,案例丰富,实用性强,特别适合Go语言初学者和进阶读者阅读。另外,本书也适合作为相关培训学校和各大院校的教材或教学参考书。


-------------------------------------------------------------------------------------------

业内点评

本书吸取了业内号称“Go语言圣经”的《Go程序设计语言》一书的精华,内容和实例非常接地气,开发人员可以快速入门Go语言并掌握“避坑”技巧,编写出具有优良设计的代码。
——FBG对冲基金高级投资顾问/Golang开源社区著名KOL 傅理(xtaci)

本书不仅全面介绍了Go语言的语法和开发技巧,而且还剖析了作者开发的开源网络库cellnet的设计和架构思想,给读者提供了一个从入门到进阶的渐进式学习路径,是一本值得反复阅读的佳作。
——成都手领科技联合创始人&CTO 张锐

本书是作者多年Go语言项目开发的经验总结。对于学习Go语言的读者而言,本书是一本很好的入门教程。作者用简单明了的语言由浅入深地介绍了每个知识点,并结合大量实例分析问题,可以帮助读者更好地掌握Go语言的重要知识点和开发技巧。
     ——游戏蜗牛技术研究院 张俊胜

从C++到Go语言,本书作者拥有十多年的开发经验积累,对主流编程语言的思想有深刻理解。本书对Go语言做了深入浅出的剖析,系统地讲述了Go语言的编程方法,是一本不可多得的佳作。
——上海软星 陈杰

本书是一本Go语言的饕餮盛宴,内容详尽,讲解深入浅出。不论你是Go语言的初学者,还是正在使用Go语言开发项目的程序员,阅读完本书,都会有很大的获益。
——竞技世界 王海波

图书目录

配套学习资源
前言
第1章 初识Go语言 1
1.1 Go语言特性 1
1.2 使用Go语言的项目 9
1.3 怎样安装Go语言开发包 10
1.3.1 Windows版安装 11
1.3.2 Linux版安装 13
1.4 搭建开发环境 14
1.4.1 集成开发环境——Jetbrains GoLand 14
1.4.2 方便定义功能的编辑器——Visual Studio Code 15
第2章 Go语言基本语法与使用 19
2.1 变量 19
2.1.1 声明变量 19
2.1.2 初始化变量 20
2.1.3 多个变量同时赋值 23
2.1.4 匿名变量——没有名字的变量 24
2.2 数据类型 24
2.2.1 整型 25
2.2.2 浮点型 25
2.2.3 示例:输出正弦函数(Sin)图像 26
2.2.4 布尔型 28
2.2.5 字符串 29
2.2.6 字符 31
2.2.7 切片——能动态分配的空间 32
2.3 转换不同的数据类型 33
2.4 指针 34
2.4.1 认识指针地址和指针类型 35
2.4.2 从指针获取指针指向的值 36
2.4.3 使用指针修改值 37
2.4.4 示例:使用指针变量获取命令行的输入信息 39
2.4.5 创建指针的另一种方法——new()函数 40
2.5 变量生命期——变量能够使用的代码范围 40
2.5.1 什么是栈 41
2.5.2 什么是堆 42
2.5.3 变量逃逸(Escape Analysis)——自动决定变量分配方式,提高运行效率 43
2.6 字符串应用 46
2.6.1 计算字符串长度 46
2.6.2 遍历字符串——获取每一个字符串元素 47
2.6.3 获取字符串的某一段字符 48
2.6.4 修改字符串 49
2.6.5 连接字符串 49
2.6.6 格式化 50
2.6.7 示例:Base64编码——电子邮件的基础编码格式 51
2.6.8 示例:从INI配置文件中查询需要的值 52
2.7 常量——恒定不变的值 57
2.7.1 枚举——一组常量值 58
2.7.2 将枚举值转换为字符串 59
2.8 类型别名(Type Alias) 60
2.8.1 区分类型别名与类型定义 61
2.8.2 非本地类型不能定义方法 62
2.8.3 在结构体成员嵌入时使用别名 63
第3章 容器:存储和组织数据的方式 65
3.1 数组——固定大小的连续空间 65
3.1.1 声明数组 66
3.1.2 初始化数组 66
3.1.3 遍历数组——访问每一个数组元素 67
3.2 切片(slice)——动态分配大小的连续空间 67
3.2.1 从数组或切片生成新的切片 68
3.2.2 声明切片 70
3.2.3 使用make()函数构造切片 71
3.2.4 使用append()函数为切片添加元素 71
3.2.5 复制切片元素到另一个切片 73
3.2.6 从切片中删除元素 74
3.3 映射(map)——建立事物关联的容器 76
3.3.1 添加关联到map并访问关联和数据 76
3.3.2 遍历map的“键值对”——?访问每一个map中的关联关系 77
3.3.3 使用delete()函数从map中删除键值对 79
3.3.4 清空map中的所有元素 79
3.3.5 能够在并发环境中使用的map——?sync.Map 79
3.4 列表(list)——可以快速增删的非连续空间的容器 81
3.4.1 初始化列表 83
3.4.2 在列表中插入元素 83
3.4.3 从列表中删除元素 84
3.4.4 遍历列表——访问列表的每一个元素 85
第4章 流程控制 87
4.1 条件判断(if) 87
4.2 构建循环(for) 88
4.2.1 for中的初始语句——开始循环时执行的语句 89
4.2.2 for中的条件表达式——控制是否循环的开关 89
4.2.3 for中的结束语句——每次循环结束时执行的语句 90
4.3 示例:九九乘法表 90
4.4 键值循环(for range)——直接获得对象的索引和数据 91
4.4.1 遍历数组、切片——获得索引和元素 92
4.4.2 遍历字符串——获得字符 92
4.4.3 遍历map——获得map的键和值 92
4.4.4 遍历通道(channel)——接收通道数据 93
4.4.5 在遍历中选择希望获得的变量 93
4.5 分支选择(switch)——拥有多个条件分支的判断 94
4.5.1 基本写法 95
4.5.2 跨越case的fallthrough——兼容C语言的case设计 96
4.6 跳转到指定代码标签(goto) 96
4.6.1 使用goto退出多层循环 96
4.6.2 使用goto集中处理错误 97
4.6.3 统一错误处理 98
4.7 跳出指定循环(break)——可以跳出多层循环 99
4.8 继续下一次循环(continue) 100
第5章 函数(function) 101
5.1 声明函数 101
5.1.1 普通函数的声明形式 101
5.1.2 参数类型的简写 102
5.1.3 函数的返回值 102
5.1.4 调用函数 104
5.1.5 示例:将“秒”解析为时间单位 104
5.1.6 示例:函数中的参数传递效果测试 105
5.2 函数变量——把函数作为值保存到变量中 108
5.3 示例:字符串的链式处理——操作与数据分离的设计技巧 109
5.4 匿名函数——没有函数名字的函数 112
5.4.1 定义一个匿名函数 112
5.4.2 匿名函数用作回调函数 113
5.4.3 使用匿名函数实现操作封装 113
5.5 函数类型实现接口——把函数作为接口来调用 115
5.5.1 结构体实现接口 115
5.5.2 函数体实现接口 116
5.5.3 HTTP包中的例子 117
5.6 闭包(Closure)——引用了外部变量的匿名函数 118
5.6.1 在闭包内部修改引用的变量 119
5.6.2 示例:闭包的记忆效应 119
5.6.3 示例:闭包实现生成器 121
5.7 可变参数——参数数量不固定的函数形式 122
5.7.1 fmt包中的例子 122
5.7.2 遍历可变参数列表——获取每一个参数的值 123
5.7.3 获得可变参数类型——获得每一个参数的类型 124
5.7.4 在多个可变参数函数中传递参数 125
5.8 延迟执行语句(defer) 127
5.8.1 多个延迟执行语句的处理顺序 127
5.8.2 使用延迟执行语句在函数退出时释放资源 127
5.9 处理运行时发生的错误 131
5.9.1 net包中的例子 131
5.9.2 错误接口的定义格式 132
5.9.3 自定义一个错误 132
5.9.4 示例:在解析中使用自定义错误 133
5.10 宕机(panic)——程序终止运行 135
5.10.1 手动触发宕机 135
5.10.2 在运行依赖的必备资源缺失时主动触发宕机 136
5.10.3 在宕机时触发延迟执行语句 136
5.11 宕机恢复(recover)——防止程序崩溃 137
5.11.1 让程序在崩溃时继续执行 137
5.11.2 panic和recover的关系 139
第6章 结构体(struct) 141
6.1 定义结构体 141
6.2 实例化结构体——为结构体分配内存并初始化 142
6.2.1 基本的实例化形式 142
6.2.2 创建指针类型的结构体 143
6.2.3 取结构体的地址实例化 143
6.3 初始化结构体的成员变量 144
6.3.1 使用“键值对”初始化结构体 145
6.3.2 使用多个值的列表初始化结构体 146
6.3.3 初始化匿名结构体 147
6.4 构造函数——结构体和类型的一系列初始化操作的函数封装 148
6.4.1 多种方式创建和初始化结构体——模拟构造函数重载 149
6.4.2 带有父子关系的结构体的构造和初始化——模拟父级构造调用 149
6.5 方法 150
6.5.1 为结构体添加方法 151
6.5.2 接收器——方法作用的目标 152
6.5.3 示例:二维矢量模拟玩家移动 155
6.5.4 为类型添加方法 160
6.5.5 示例:使用事件系统实现事件的响应和处理 165
6.6 类型内嵌和结构体内嵌 170
6.6.1 声明结构体内嵌 170
6.6.2 结构内嵌特性 172
6.6.3 使用组合思想描述对象特性 173
6.6.4 初始化结构体内嵌 174
6.6.5 初始化内嵌匿名结构体 175
6.6.6 成员名字冲突 177
6.7 示例:使用匿名结构体分离JSON数据 178
第7章 接口(interface) 181
7.1 声明接口 181
7.1.1 接口声明的格式 181
7.1.2 开发中常见的接口及写法 182
7.2 实现接口的条件 182
7.2.1 接口被实现的条件一:接口的方法与实现接口的类型方法格式一致 182
7.2.2 条件二:接口中所有方法均被实现 185
7.3 理解类型与接口的关系 186
7.3.1 一个类型可以实现多个接口 186
7.3.2 多个类型可以实现相同的接口 187
7.4 示例:便于扩展输出方式的日志系统 189
7.5 示例:使用接口进行数据的排序 195
7.5.1 使用sort.Interface接口进行排序 195
7.5.2 常见类型的便捷排序 197
7.5.3 对结构体数据进行排序 199
7.6 接口的嵌套组合——将多个接口放在一个接口内 202
7.7 在接口和类型间转换 205
7.7.1 类型断言的格式 205
7.7.2 将接口转换为其他接口 205
7.7.3 将接口转换为其他类型 208
7.8 空接口类型(interface{})——能保存所有值的类型 208
7.8.1 将值保存到空接口 209
7.8.2 从空接口获取值 209
7.8.3 空接口的值比较 210
7.9 示例:使用空接口实现可以保存任意值的字典 211
7.10 类型分支——批量判断空接口中变量的类型 214
7.10.1 类型断言的书写格式 214
7.10.2 使用类型分支判断基本类型 215
7.10.3 使用类型分支判断接口类型 215
7.11 示例:实现有限状态机(FSM) 217
第8章 包(package) 227
8.1 工作目录(GOPATH) 227
8.1.1 使用命令行查看GOPATH信息 227
8.1.2 使用GOPATH的工程结构 228
8.1.3 设置和使用GOPATH 229
8.1.4 在多项目工程中使用GOPATH 230
8.2 创建包package——编写自己的代码扩展 231
8.3 导出标识符——让外部访问包的类型和值 231
8.3.1 导出包内标识符 231
8.3.2 导出结构体及接口成员 232
8.4 导入包(import)——在代码中使用其他的代码 232
8.4.1 默认导入的写法 233
8.4.2 导入包后自定义引用的包名 234
8.4.3 匿名导入包——只导入包但不使用包内类型和数值 235
8.4.4 包在程序启动前的初始化入口:init 235
8.4.5 理解包导入后的init()函数初始化顺序 235
8.5 示例:工厂模式自动注册——管理多个包的结构体 237
第9章 并发 241
9.1 轻量级线程(goroutine)——根据需要随时创建的“线程” 241
9.1.1 使用普通函数创建goroutine 241
9.1.2 使用匿名函数创建goroutine 244
9.1.3 调整并发的运行性能(GOMAXPROCS) 245
9.1.4 理解并发和并行 245
9.1.5 Go语言的协作程序(goroutine)和普通的协作程序(coroutine) 246
9.2 通道(channel)——在多个goroutine间通信的管道 246
9.2.1 通道的特性 247
9.2.2 声明通道类型 247
9.2.3 创建通道 248
9.2.4 使用通道发送数据 248
9.2.5 使用通道接收数据 249
9.2.6 示例:并发打印 252
9.2.7 单向通道——通道中的单行道 254
9.2.8 带缓冲的通道 255
9.2.9 通道的多路复用——同时处理接收和发送多个通道的数据 257
9.2.10 示例:模拟远程过程调用(RPC) 258
9.2.11 示例:使用通道响应计时器的事件 261
9.2.12 关闭通道后继续使用通道 264
9.3 示例:Telnet回音服务器——TCP服务器的基本结构 266
9.4 同步——保证并发环境下数据访问的正确性 273
9.4.1 竞态检测——检测代码在并发环境下可能出现的问题 273
9.4.2 互斥锁(sync.Mutex)——保证同时只有一个goroutine可以访问共享资源 275
9.4.3 读写互斥锁(sync.RWMutex)——在读比写多的环境下比互斥锁更高效 277
9.4.4 等待组(sync.WaitGroup)——保证在并发环境中完成指定数量的任务 277
第10章 反射 280
10.1 反射的类型对象(reflect.Type) 280
10.1.1 理解反射的类型(Type)与种类(Kind) 281
10.1.2 指针与指针指向的元素 283
10.1.3 使用反射获取结构体的成员类型 284
10.1.4 结构体标签(Struct Tag)——对结构体字段的额外信息标签 287
10.2 反射的值对象(reflect.Value) 288
10.2.1 使用反射值对象包装任意值 288
10.2.2 从反射值对象获取被包装的值 289
10.2.3 使用反射访问结构体的成员字段的值 290
10.2.4 反射对象的空和有效性判断 292
10.2.5 使用反射值对象修改变量的值 293
10.2.6 通过类型创建类型的实例 297
10.2.7 使用反射调用函数 298
10.3 示例:将结构体的数据保存为JSON格式的文本数据 299
第11章 编译与工具 306
11.1 编译(go build) 306
11.1.1 go build 无参数编译 306
11.1.2 go build+文件列表 307
11.1.3 go build +包 308
11.1. 4 go build编译时的附加参数 310
11.2 编译后运行(go run) 310
11.3 编译并安装(go install) 311
11.4 一键获取代码、编译并安装(go get) 312
11.4.1 远程包的路径格式 312
11.4.2 go get + 远程包 312
11.4.3 go get使用时的附加参数 313
11.5 测试(go test) 313
11.5.1 单元测试——测试和验证代码的框架 313
11.5.2 基准测试——获得代码内存占用和运行效率的性能数据 316
11.6 性能分析(go pprof)——发现代码性能问题的调用位置 319
11.6.1 安装第三方图形化显式分析数据工具(Graphviz) 319
11.6.2 安装第三方性能分析来分析代码包 319
11.6.3 性能分析代码 319
第12章 “避坑”与技巧 323
12.1 合理地使用并发特性 323
12.1.1 了解goroutine的生命期时再创建goroutine 323
12.1.2 避免在不必要的地方使用通道 326
12.2 反射:性能和灵活性的双刃剑 330
12.3 接口的nil判断 335
12.4 map的多键索引——多个数值条件可以同时查询 336
12.4.1 基于哈希值的多键索引及查询 337
12.4.2 利用map特性的多键索引及查询 341
12.4.3 总结 342
12.5 优雅地处理TCP粘包 342
第13章 实战演练——剖析cellnet网络库设计并实现Socket聊天功能 354
13.1 了解cellet网络库特性、流程及架构 354
13.1.1 cellnet网络库的特性 354
13.1.2 cellnet网络库的流程及架构 356
13.2 管理TCP Socket连接 356
13.2.1 理解Socket的事件类型 357
13.2.2 管理事件回调 359
13.2.3 连接器(Connector) 361
13.2.4 会话管理(SessionManager) 363
13.2.5 接受器(Acceptor) 366
13.3 组织接收和发送数据流程的Socket会话(Session) 367
13.3.1 在会话开始时启动goroutine和派发事件 368
13.3.2 会话中的接收数据循环 369
13.3.3 会话中的发送数据循环 370
13.4 排队处理事件的事件队列(EventQueue) 372
13.4.1 实现事件队列 372
13.4.2 使用不同的事件队列模式处理数据 374
13.5 消息编码(codec)——让cellnet支持消息的多种编码格式 377
13.6 消息元信息(MessageMeta)——消息ID、消息名称和消息类型的关联关系 379
13.6.1 理解消息元信息 380
13.6.2 注册消息元信息 380
13.6.3 示例:使用消息元信息 381
13.6.4 实现消息的编码(EncodeMessage())和解码(DecodeMessage())函数 382
13.7 接收和发送封包(packet) 383
13.7.1 接收可变长度封包 384
13.7.2 了解封包数据读取器(PacketReader) 385
13.7.3 了解封包数据写入器(PacketWriter) 387
13.7.4 读取自定义封包及数据 387
13.7.5 写入自定义封包及数据 389
13.7.6 响应消息处理事件 390
13.8 使用cellnet网络库实现聊天功能 392
13.8.1 定义聊天协议 393
13.8.2 实现客户端功能 394
13.8.3 实现服务器功能 396
13.8.4 运行聊天服务器和客户端 398

教学资源推荐
作者: [美]加里·R. 赖特(Gary R. Wright),W. 理查德·史蒂文斯(W. Richard Stevens) 著
作者: Brian W.Kernighan,Rob Pike
作者: 郑阿奇 主编 丁有和 编著
作者: Maurice Herlihy;Nir Shavit
参考读物推荐
作者: (美)Joshua Bloch
作者: (英)Ayers,D.