Support Statistics
¥.00 ·
0times
Text Preview (First 20 pages)
Registered users can read the full content for free
Register as a Gaohf Library member to read the complete e-book online for free and enjoy a better reading experience.
Page
1
(This page has no text content)
Page
2
(This page has no text content)
Page
3
(This page has no text content)
Page
4
版权信息 书名:Go语言从入门到进阶实战 作者:徐波 排版:skip 出版社:机械工业出版社 出版时间:2018-05-01 ISBN:9787111598244 — · 版权所有 侵权必究 · —
Page
5
配套学习资源 本书提供了配套教学视频等超值学习资料,下面将分别介绍。 1.同步配套教学视频 作者为本书中的一些重点例子录制了同步配套教学视频,以帮助 读者高效学习,如图1所示。
Page
6
(This page has no text content)
Page
7
图1 本书教学视频 2.书中案例源文件 本书提供了书中涉及的案例源代码文件,如图2所示。读者可以边 看视频边参考提供的源代码自己动手实现书中的例子,这样能迅速学 会每个Go语言的语法特性,也能迅速提高自己的编程能力。
Page
8
图2 本书案例源文件 3.配套学习资源获取方式 本书提供的配套学习资源需要读者自行下载。请登录机械工业出 版社华章公司的网站www.hzbook.com,然后搜索到本书页面,单击页 面上的资料下载按钮即可下载。
Page
9
前言 现今,多核CPU已经成为服务器的标配。但是对多核的运算能力 挖掘一直由程序员人工设计算法及框架来完成。这个过程需要开发人 员具有一定的并发设计及框架设计能力。虽然一些编程语言的框架在 不断地提高多核资源使用效率,如Java的Netty等,但仍然需要开发人 员花费大量的时间和精力搞懂这些框架的运行原理后才能熟练掌握。 Go语言在多核并发上拥有原生的设计优势。Go语言从2009年11月 开源,2012年发布Go 1.0稳定版本以来,已经拥有活跃的社区和全球 众多开发者,并且与苹果公司的Swift一样,成为当前非常流行的开发 语言之一。很多公司,特别是中国的互联网公司,即将或者已经完成 了使用Go语言改造旧系统的过程。经过Go语言重构的系统能使用更 少的硬件资源而有更高的并发和I/O吞吐表现。 Go语言简单易学,学习曲线平缓,不需要像C/C++语言动辄需要 两到三年的学习期。Go语言被称为“互联网时代的C语言”。互联网 的短、频、快特性在Go语言中体现得淋漓尽致。一个熟练的开发者只 需要短短的一周时间就可以从学习阶段转到开发阶段,并完成一个高 并发的服务器开发。 面对Go语言的普及和学习热潮,本书使用浅显易懂的语言,介绍 了GO语言从基础的语法知识到并发和接口等新特性知识,从而带领 读者迅速熟悉这门新时代的编程语言。
Page
10
本书特色 1.提供同步配套的教学视频 为了让读者更好地学习本书,作者为书中的重点内容录制了配套 教学视频,借助这些视频,读者可以更轻松地学习。 作者曾经为慕课网的专业视频制作提供指导,并在慕课网做过多 期Go语言、Unity 3D游戏引擎和Cocos游戏引擎等网络教学培训,受到 众多开发者的青睐及好评。希望读者能够通过作者录制的视频轻松地 学习Go语言。 2.来自一线的开发经验及实战例子 本书中的大多数例子及代码都来自于作者多年的口述教学和技术 分享会等实践,受到了众多开发者的一致好评。同时,作者本人也是 一名开源爱好者,编写了业内著名的cellnet网络库。本书将为读者介绍 cellnet的架构和设计思想,以帮助读者剖析cellnet内部的运行机制,从 而让读者能方便地使用cellnet快速实现业务逻辑。 3.浅显易懂的语言、触类旁通的讲解、循序渐进的知识体系 本书在内容编排上尽量做到通俗易懂;在讲解一些常见编程语言 特性时,将Go语言和其他多种语言的特性进行对比,让掌握多种编程 语言的开发者能迅速理解Go语言的特性。无论是初学者,还是久经 “沙场”的老程序员,都能通过本书快速学习Go语言的精华。 4.内容全面,实用性强 本书详细介绍了作者精心挑选的多个实用性很强的例子,如JSON 串行化、有限状态机(FSM)、TCP粘包处理、Echo服务器和事件系 统等。读者既可以从例子中学习并理解Go语言的知识点,还可以将这 些例子应用于实际开发中。 本书内容
Page
11
第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)。
Page
12
第5章 函数(function) 本章首先介绍了Go语言中较为基础的函数声明格式及命名返回值 特性;然后介绍了Go语言中较为灵活的特性,即函数变量和匿名函 数;还介绍了一个展示操作与数据分离的示例:字符串的链式处理, 从而引出函数闭包概念;之后介绍了Go语言中最具特色的如下几个功 能: (1)延迟执行语句(defer)——将语句延迟到函数退出时执行; (2)宕机(panic)——终止程序运行; (3)宕机恢复(recover)——让程序从宕机中恢复。 第6章 结构体(struct) 本章介绍了Go语言中最重要的概念:结构体。首先讲解了结构体 多种灵活的实例化和成员初始化方法;接着使用面向对象和面向过程 等思想,逐步介绍了Go语言中的方法及新的概念接收器;然后使用游 戏中经典的位置移动例子,展现了结构体的实际使用方法;最后,使 用大量例子介绍了结构体内嵌和类型内嵌内容,并在JSON数据的分离 实例中体验Go语言的内嵌结构体的强大功能。 本章中的经典例子:使用事件系统实现事件的响应和处理——展 现Go语言的方法与函数的统一调用过程。 第7章 接口(interface) 本章介绍了Go语言接口的如下几个知识点: (1)声明接口; (2)实现接口的条件; (3)接口的嵌套组合;
Page
13
(4)接口的转换; (5)接口类型断言和类型分支——判断接口的类型; (6)空接口。 本章中涉及的例子有:便于扩展输出方式的日志系统;使用接口 进行数据的排序;使用空接口实现可以保存任意值的字典及实现有限 状态机(FSM)等。 第8章 包(package) 本章首先介绍了构建工程的基础概念GOPATH,接着介绍了包 (package)的创建和导入过程与方法,以及能控制访问权限的导出包 内标识符的方法。 本章给出了一个典型的工厂模式自动注册示例,介绍了多个包的 定义和使用方法。 第9章 并发 本章讲解了Go语言中并发的两个重要概念:轻量级线程 (goroutine)和通道(channel)。首先介绍了goroutine的创建方法及一 些和并发相关的概念,便于读者理解goroutine和线程的区别与联系; 然后介绍了通道的声明、创建和使用方法,使用3个示例,即模拟远程 过程调用(RPC)、使用通道响应计时器事件和Telnet回音服务器,来 展示通道的实际使用方法;最后介绍了在并发环境下的同步处理方 法,如使用互斥锁和等待组等,以及使用竞态检测提前发现并发问 题。 第10章 反射 本章按照反射的类别分为两部分:反射类型对象(reflect.Type) 和反射值对象(reflect.Value)。首先介绍了反射类型的获取及遍历方 法,同时介绍了反射类型对象获取结构体标签的方法;接着介绍了反
Page
14
射值对象获取及修改值和遍历值等;最后通过使用反射将结构体串行 化为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)消息编码;
Page
15
(5)消息元信息; (6)接收和发送封包。 本章使用cellnet网络库实现了带有聊天功能的客户端和服务器。 本书读者对象 ·Go语言初学者; ·Go语言进阶读者; ·编程初学者; ·后端程序初学者; ·前端转后端的开发人员; ·熟悉C/C++、Java和C#语言,想了解和学习Go语言的编程爱好 者; ·想用Go语言快速学习编写服务器端程序的开发者; ·相关培训学员; ·各大院校的学生。 关于作者 本书由徐波编写,郭聪和张锐参与审核和校对。感谢我的妻子和 家人在我写书期间的大力支持。 另外,在本书编写期间,得到了吴宏伟先生的耐心指导,他一丝 不苟、细致入微地对书稿进行了审核和校对,这让本书的条理更加清 晰,语言更加通俗易懂。在此表示深深的感谢!
Page
16
虽然我们对书中所述内容都尽量核实,并多次进行了文字校对, 但因时间所限,加之水平所限,书中的疏漏和错误在所难免,敬请广 大读者批评指正。联系我们请发E-mail到hzbook2017@163.com。 徐波
Page
17
第1章 初识Go语言 Go语言是一门新生语言,从其出现就备受大家的喜爱。本章会带 领读者领略Go语言的特性,介绍Go语言在国内外公司及项目的应用情 况,同时让读者了解这门强大语言背后的三位缔造者及团队成员。为 了方便读者跟着本书的步骤进行操作和实践,本章还会介绍如何搭建 Go语言的开发环境。
Page
18
1.1 Go语言特性 Go语言是Google公司开发的一种静态型、编译型并自带垃圾回收 和并发的编程语言。 Go语言的风格类似于C语言。其语法在C语言的基础上进行了大幅 的简化,去掉了不需要的表达式括号,循环也只有for一种表示方法, 就可以实现数值、键值等各种遍历。因此,Go语言上手非常容易。 Go语言最有特色的特性莫过于goroutine。Go语言在语言层可以通 过goroutine对函数实现并发执行。goroutine类似于线程但是并非线 程,goroutine会在Go语言运行时进行自动调度。因此,Go语言非常适 合用于高并发网络服务的编写。 1.上手容易 很多读者表示自己是在看了介绍后才开始了解这门语言的。他们 一般也会使用两到三门编程语言。Go语言对于他们来说,也就是一到 两天的熟悉过程,之后就可以开始使用Go语言解决具体问题了。大约 一周左右已经可以使用Go语言完成既定的任务了。 Go语言这种从零开始使用到解决问题的速度,在其他语言中是完 全不可想象的。学过C++的朋友都知道,一到两年大强度的理论学习和 实战操练也只能学到这门语言的皮毛,以及知道一些基本的避免错误 的方法。 那么,Go语言到底有多么简单?下面从实现一个HTTP服务器开始 了解。
Page
19
HTTP文件服务器是常见的Web服务之一。开发阶段为了测试,需要 自行安装Apache或Nginx服务器,下载安装配置需要大量的时间。使用 Go语言实现一个简单的HTTP服务器只需要几行代码,如代码1-1所示。 代码1-1 HTTP文件服务器(具体文件: …/chapter01/httpserver/httpserver.go) 01 package main 02 03 import ( 04 "net/http" 05 ) 06 07 func main() { 08 09 http.Handle("/", http.FileServer(http.Dir("."))) 10 11 http.ListenAndServe(":8080", nil) 12 } 代码说明如下: ·第1行,标记当前文件为main包,main包也是Go程序的入口包。 ·第3~5行,导入net/http包,这个包的作用是HTTP的基础封装和 访问。 ·第7行,程序执行的入口函数main()。 ·第9行,使用http.FileServer文件服务器将当前目录作为根目录 (“/”)的处理器,访问根目录,就会进入当前目录。 ·第11行,默认的HTTP服务侦听在本机8080端口。 把这个源码保存为main.go,安装Go语言的开发包,在命令行输入 如下命令行: $ go run httpserver.go
Page
20
在浏览器里输入http://127.0.0.1:8080即可浏览文件,这些文件 正是当前目录在HTTP服务器上的映射目录。 2.编译输出可执行文件 Go语言的代码可以直接输出为目标平台的原生可执行文件。Go语 言不使用虚拟机,只有运行时(runtime)提供垃圾回收和goroutine 调度等。 Go语言使用自己的链接器,不依赖任何系统提供的编译器、链接 器。因此编译出的可执行文件可以直接运行在几乎所有的操作系统和 环境中。 从Go 1.5版本之后,Go语言实现自举,实现了使用Go语言编写Go 语言编译器及所有工具链的功能。 使用最经典的Go语言版的“hello world”源码来编译输出一个可 执行文件,如代码1-2所示。 代码1-2 Go语言版的hello world!(具体文件: …/chapter01/helloworld/helloworld.go) package main import "fmt" func main() { fmt.Println("hello world") } 将这段代码保存为main.go,确认安装Go语言的开发包,使用如下 指令可以将这段代码编译为可执行文件: $ go build ./helloworld.go 执行hello world的可执行文件就可以输出“hello world”。 Go语言不仅可以输出可执行文件,还可以编译输出能导入C语言的 静态库、动态库。
The above is a preview of the first 20 pages. Register to read the complete e-book.
Comments 0
Loading comments...
Reply to Comment
Edit Comment