封面
版权信息
内容提要
前言
第1章 Go语言简介
1.1 Go语言的发展历史
1.2 Go语言的主要特点
第2章 开发环境准备
2.1 安装Go语言
2.1.1 Windows系统下安装Go语言
2.1.2 Mac OS X系统下安装Go语言
2.1.3 Linux系统下安装Go语言
2.2 打造更舒适的开发环境
2.2.1 修改Windows资源管理器的一些显示设置
2.2.2 命令提示符CMD的替代方案
2.2.3 文本文件编辑器
2.3 Go语言开发工具的选择
2.3.1 LiteIDE
2.3.2 Visual Studio Code加Go语言插件
2.3.3 其他开发工具
第3章 Go语言快速入门
3.1 初识Go语言——编写、编译和运行
3.1.1 怎样输入Go语言程序
3.1.2 怎样编译Go语言程序
3.1.3 怎样执行Go语言程序
3.1.4 怎样查看Go语言的文档
3.2 Go语言程序的组织
3.2.1 Go语言中程序文件的组织方式
3.2.2 非执行包与包的引用
3.2.3 自己编写非执行包
3.2.4 非执行包名与目录的关系
3.2.5 用多级子目录组织包结构
3.3 关键字等语言要素
3.4 变量
3.4.1 变量的基本概念
3.4.2 浮点数类型的变量
3.4.3 字符串类型的变量
3.4.4 布尔类型的变量
3.4.5 变量的命名
3.4.6 变量声明和赋值的简化形式
3.4.7 复合类型的变量
3.4.8 变量类型的转换
3.4.9 指针类型的变量
3.4.10 变量的零值
3.5 表达式
3.6 函数(方法)
3.7 自定义数据类型
3.8 面向对象编程
3.9 条件判断与分支
3.10 循环
3.11 并发处理:Go例程
3.12 注释
3.13 程序编译或运行时出现错误
3.14 总结的代码
第4章 Go语言的基本语法与开发基础
4.1 Go语言语法要素与代码规范
4.1.1 文件和字符串编码
4.1.2 语句、代码块与执行顺序
4.1.3 语句分隔
4.1.4 语法记号
4.2 代码格式化工具gofmt
4.3 常用的辅助性内置函数
4.3.1 内置的输出信息函数print与println
4.3.2 获取数据长度的len函数
4.3.3 获取变量容量的cap函数
4.3.4 用于复合类型数据的操作函数
4.3.5 用于处理异常的函数
4.4 格式化输出函数fmt.Printf
4.4.1 整数格式化符%d
4.4.2 十六进制格式化符%x和%X
4.4.3 二进制格式化符%b
4.4.4 浮点数格式化符%f
4.4.5 其他浮点数格式化符
4.4.6 布尔类型的格式化符%t
4.4.7 Unicode码相关格式化符%c、%q和%U
4.4.8 字符串格式化符%s
4.4.9 指针格式化符%p
4.4.10 万能格式化符%v
4.4.11 输出数值类型的格式化符%T
4.4.12 输出%字符本身
4.5 获取和使用第三方包
4.6 定义和使用常量
4.7 变量、函数等标识符声明的作用范围
4.8 tools包——编写自己的函数库
第5章 用Go语言进行数学、科学领域的计算
5.1 表达式
5.1.1 最简单的表达式——单个数值
5.1.2 操作符在表达式中的作用
5.1.3 函数在表达式中的作用
5.1.4 表达式的组合与计算的优先级
5.1.5 表达式中数据类型的一致性要求
5.2 用表达式进行数学计算
5.2.1 体重指数
5.2.2 用表达式计算体重指数
5.2.3 使用命令行参数传入体重和身高的变量值
5.3 利用系统自带的数学库进行计算
5.3.1 查阅Go语言中的参考文档
5.3.2 使用math.Pow函数进行平方计算
5.3.3 用math/rand包生成随机数
5.4 用Go语言进行科学计算
5.4.1 向量与余弦相似度概念简介
5.4.2 计算向量余弦相似度的函数
5.5 使用math/big包避免计算过程中超大数溢出
5.5.1 big包的基本使用方法
5.5.2 用big包改进余弦相似度计算函数
5.6 计算中的异常处理
5.6.1 Go语言中的匿名函数
5.6.2 Go语言的延迟处理机制
5.6.3 Go语言的异常处理机制
5.6.4 处理计算中的异常
5.6.5 Go语言中异常的传递顺序
5.6.6 使用runtime库输出更多的异常信息
5.7 使用第三方包进行更复杂的数学计算
5.7.1 Gonum包中用于矩阵运算的mat子包简介
5.7.2 矩阵乘法的计算过程
5.7.3 用gonum/mat子包实现矩阵乘法
第6章 用Go语言开发一个命令行工具
6.1 命令行工具简介
6.2 典型命令行工具的架构
6.3 基本的命令行工具clix程序框架
6.4 Go语言中的switch语句
6.5 clix的第一个命令:version
6.6 增加体重指数计算命令calbmi
6.6.1 tools包中增加判断起始子字符串的函数
6.6.2 子字符串的截取
6.6.3 tools包中增加判断标志参数的函数
6.6.4 编写clix中的calbmi命令
6.6.5 增加命令行开关标志参数
6.6.6 使用flag包来分析命令行参数
6.7 第三个命令:数字排序
6.7.1 循环进阶
6.7.2 冒泡法排序
6.7.3 用双重循环实现冒泡法排序
6.7.4 命令行参数中传入数字序列
6.7.5 在clix程序中加入冒泡法排序的命令
6.8 Go语言中对典型代码逻辑结构的支持
6.8.1 基本的代码结构
6.8.2 利用标签跳出或继续外层循环
6.8.3 goto语句无条件跳转
6.8.4 递归(调用自身函数)
第7章 Go语言中的字符串处理
7.1 字符串相关的基础知识
7.1.1 字符串的基本概念
7.1.2 byte、uint8和int8类型
7.1.3 byte类型的切片([]byte)与string
7.1.4 字符串的基本操作:取长度、连接、截取等
7.1.5 用双引号或反引号括起字符串的区别
7.2 字符串支持多语言编码的特殊处理
7.2.1 UTF-8编码
7.2.2 rune类型和rune类型切片
7.2.3 用rune对字符串进行遍历
7.3 常见的字符串操作
7.3.1 判断字符串中是否含有某个子串
7.3.2 获取字符串中子串的位置
7.3.3 获取字符串中子串第n次出现的位置
7.3.4 统计字符串中子串出现的次数
7.3.5 判断字符串的起始或结尾子串
7.3.6 比较两个字符串
7.3.7 去除字符串首尾空白或其他字符
7.3.8 替换字符串中的子串
7.3.9 字符串大小写的转换
7.3.10 切分字符串
7.3.11 合并字符串切片
7.3.12 生成重复子串组成的字符串
7.3.13 几个Unicode操作
7.4 高级字符串操作
7.4.1 生成随机字符串
7.4.2 用strings.Builder实现不断增长的字符串
7.4.3 用于读取字符串内容的strings.Reader
7.4.4 字符串与数字的相互转化
7.4.5 用fmt.Sprintf实现灵活的字符串处理
7.4.6 用fmt.Sscanf从字符串中读取信息
第8章 Go语言中的正则表达式
8.1 正则表达式的基本概念与用法
8.1.1 用正则表达式判断字符串是否含有符合一定规则的子串
8.1.2 用正则表达式从字符串中提取符合一定规则的子串
8.1.3 用通配符“。”匹配任意字符
8.1.4 贪婪与非贪婪匹配
8.1.5 分组提取子串
8.1.6 提取所有符合条件的带捕获组的匹配结果
8.1.7 替换符合正则表达式的子串
8.1.8 转义字符
8.2 正则表达式进阶知识
8.2.1 单个字符的表达
8.2.2 表达字符出现的次数(数量)
8.2.3 非字符匹配(位置匹配)
8.2.4 正则表达式中使用标志位进行设置
8.2.5 可选子串匹配
8.2.6 非捕获组
8.2.7 获取匹配到子串的索引位置
8.2.8 用正则表达式分割字符串
8.2.9 判断整个字符串是否匹配正则表达式
8.2.10 按字节进行正则表达式匹配
第9章 Go语言文件处理
9.1 Go语言中文本文件的处理
9.1.1 文本文件的编码
9.1.2 文本文件的打开、读取与关闭等基本操作
9.1.3 从较大的文本文件中读取完整内容
9.1.4 较简单的读取完整文本的方法
9.1.5 更简单的读取完整文本的方法
9.1.6 从文本文件中读取指定数量的行
9.1.7 将字符串写入文本文件
9.1.8 向已有的文本文件中追加内容
9.1.9 用移动文件指针的方法向文件中追加内容
9.1.10 文件、目录的其他基本操作
9.1.11 文本文件编码转换
9.1.12 文本排序
9.1.13 超大文本文件排序
9.1.14 文本查重、去重
9.2 Go语言中二进制文件的处理
9.2.1 Go语言中用二进制文件存储数据
9.2.2 自定义文件格式存储大量数据记录
9.3 文件处理总结
第10章 Go语言中数据格式的分析与转换
10.1 常见的数据交换格式
10.2 XML格式的处理
10.2.1 将数据序列化成XML格式
10.2.2 将XML格式的文本反序列化
10.2.3 省略字段、字符字段和原始XML文本字段
10.2.4 自行控制某数据类型的XML序列化/反序列化
10.3 JSON格式的处理
10.3.1 将数据序列化成JSON格式
10.3.2 将JSON格式的文本反序列化
10.3.3 JSON序列化/反序列化时使用描述字符串
10.3.4 自行控制自定义数据类型的JSON序列化/反序列化
10.3.5 用空接口类型实现复杂结构的JSON序列化
10.3.6 JSON解析中空接口类型的应用
10.3.7 使用第三方包进行JSON格式的序列化与反序列化
第11章 Go语言的并发处理
11.1 Go语言并发编程基础
11.2 并发处理时的共享冲突
11.3 使用通道类型实现安全的数据共享
11.4 使用通道作为数据访问的令牌
11.5 使用通道实现多任务的归并
11.6 用select实现多通道的归并
11.7 select中实现超时中止
11.8 用单向通道自定义超时函数
11.9 使用sync包进行传统的并发处理
11.9.1 用sync.WaitGroup实现goroutine归并
11.9.2 用锁(互斥量)实现goroutine同步
11.9.3 用读写锁(互斥量)做“多读少写”型并发任务
第12章 Go语言进行数据库开发
12.1 Go语言进行数据库开发的一般方式
12.2 安装SQLite数据库驱动
12.3 基本的数据库操作——新建库表、插入记录和查询
12.4 删除记录、准备SQL查询等操作
12.5 获取记录条数、删除库表等操作
12.6 SQL型数据库开发总结
12.7 NoSQL型数据库开发示例
第13章 Go语言进行网络服务的开发
13.1 C/S架构与B/S架构的概念
13.2 基于Socket通信的客户端/服务器模式
13.3 基于TCP的Socket客户端/服务器系统
13.4 典型的Socket服务器的例子
13.5 典型的Socket客户端的例子
13.6 典型的UDP服务器的例子
13.7 典型的UDP客户端的例子
13.8 用Go语言搭建简单的Web服务器
13.9 搭建简单的文件服务器
13.10 搭建静态文件型的Web网站服务器
13.11 混合不同方式的Web服务器
13.12 搭建提供网络接口服务的API服务器
13.13 Web服务器的路由管理
13.14 动态网页的生成
13.15 提供HTTPS方式访问
13.16 第三方的Web开发包
13.17 Go语言中实现Web客户端
第14章 Go语言进行绘图和图像处理
14.1 基本的点绘图
14.2 绘制曲线图
14.3 绘制有填充色的形状
14.4 实现渐变的填充色
14.5 使用第三方库更方便实现复杂图形绘制
14.6 绘制平滑曲线
14.7 在图片上绘制文字
14.8 使用freetype包进行文字绘制
14.9 用image/draw包实现灵活的图像处理
14.9.1 实现图片区域复制
14.9.2 用draw.Draw函数进行颜色填充
14.9.3 image包中的几个重要对象
14.9.4 用颜色填充绘制矩形框
14.9.5 将图片变成全透明
14.9.6 复制原图中的区域到目标图中另一个区域
14.9.7 使用蒙版复制不规则区域
14.9.8 自定义image.Image类型的蒙版对象
14.9.9 图片色彩空间的转换
14.10 在Web中输出图像
第15章 Go语言进行图形界面开发
15.1 使用Qt开发图形界面
15.1.1 Go结合Qt开发环境的搭建
15.1.2 Go结合Qt开发基础示例
15.1.3 部署therecipe/qt示例程序
15.1.4 在goroutine中安全操作图形界面
15.2 使用govcl包开发图形界面
15.2.1 使用govcl包开发图形界面的基础示例
15.2.2 govcl包中避免并发界面操作冲突
15.3 Go语言中开发基于Web的图形界面
第16章 Go语言的反射机制
16.1 用反射机制获取基本类型的信息
16.2 用反射获取复杂类型的信息
16.3 函数的传值与传引用
16.4 用反射获取结构类型(对象)的成员信息
16.5 用反射获取空接口类型数据的实际类型
16.6 用Kind函数获取基类型
16.7 判断对象是否实现了某方法或接口
16.8 动态调用对象的方法
16.9 修改数据
16.10 实例:JSON处理
第17章 Go语言的测试与性能
17.1 功能测试
17.1.1 基本的功能测试
17.1.2 功能测试不通过的情况
17.1.3 立即中止测试用例函数
17.1.4 简化的中止测试用例函数
17.1.5 跳过测试用例
17.1.6 进行并发测试
17.1.7 指定运行的测试用例
17.2 性能测试
17.2.1 基本的性能测试
17.2.2 根据性能测试结果进行优化和比对
17.2.3 指定性能测试的时长
17.2.4 手动控制测试计时
17.2.5 测试内存分配的情况
第18章 Go语言与其他语言的结合运用
18.1 Cgo
18.1.1 Go语言中直接编写C语言代码
18.1.2 Go语言中调用C语言文件中的代码
18.1.3 Go语言中编写函数供C语言调用
18.1.4 Cgo的一些局限
18.2 Go语言中运行其他脚本语言
18.2.1 Tengo脚本语言
18.2.2 实现JavaScript虚拟机的otto包
18.2.3 实现Lua语言虚拟机的go-lua包
18.3 Go语言中直接执行其他程序或调用系统命令
18.3.1 调用应用程序并读取其输出
18.3.2 使用管道从程序的输出中接收信息
18.4 Go语言与WebAssembly
更新时间:2025-04-02 16:13:41