Statistics
20
Views
0
Downloads
0
Donations
Uploader

高宏飞

Shared on 2026-01-02
Support
Share

Author徐波

No description

Tags
No tags
ISBN: 7111598245
Publisher: 机械工业出版社
Publish Year: 2018
Language: 中文
Pages: 998
File Format: PDF
File Size: 4.6 MB
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.

(This page has no text content)
(This page has no text content)
(This page has no text content)
版权信息 书名:Go语言从入门到进阶实战 作者:徐波 排版:skip 出版社:机械工业出版社 出版时间:2018-05-01 ISBN:9787111598244 — · 版权所有 侵权必究 · —
配套学习资源 本书提供了配套教学视频等超值学习资料,下面将分别介绍。 1.同步配套教学视频 作者为本书中的一些重点例子录制了同步配套教学视频,以帮助 读者高效学习,如图1所示。
(This page has no text content)
图1 本书教学视频 2.书中案例源文件 本书提供了书中涉及的案例源代码文件,如图2所示。读者可以边 看视频边参考提供的源代码自己动手实现书中的例子,这样能迅速学 会每个Go语言的语法特性,也能迅速提高自己的编程能力。
图2 本书案例源文件 3.配套学习资源获取方式 本书提供的配套学习资源需要读者自行下载。请登录机械工业出 版社华章公司的网站www.hzbook.com,然后搜索到本书页面,单击页 面上的资料下载按钮即可下载。
前言 现今,多核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。 徐波
第1章 初识Go语言 Go语言是一门新生语言,从其出现就备受大家的喜爱。本章会带 领读者领略Go语言的特性,介绍Go语言在国内外公司及项目的应用情 况,同时让读者了解这门强大语言背后的三位缔造者及团队成员。为 了方便读者跟着本书的步骤进行操作和实践,本章还会介绍如何搭建 Go语言的开发环境。
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服务器开始 了解。
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
在浏览器里输入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.