《Go语言从入门到项目实战(视频版)》是由电子工业出版社出版的一本关于Go语言方面的书籍,作者是刘瑜、萧文翰、董树南,主要介绍了关于Go语言、Go语言入门、Go语言实战方面的知识内容,目前在Go语言类书籍综合评分为:9.5分。
书籍介绍
编辑推荐
1.强大的写作团队
三酷猫系列图书的背后拥有一个强大的写作团队,保障了图书的品质。
本书作者刘瑜老师从事代码开发和系统研究工作20余年,具有雄厚的写作基础和实战经验;萧文翰老师为资深博客专家、专栏作家,拥有丰富的项目实战经验和图书出版经验;董树南老师从事软件开发及研究工作多年,对Go语言Web开发有独到见解。三位老师默契配合,使本书将理论和实践完美地结合在一起!
2.有故事的书
三酷猫的故事始终贯穿着本书内容的始末,为学习增加了乐趣,便于读者更好地吸收重点知识,将理论更好地运用在实践中!
3.从读者角度考虑问题
一本好书值得品味,更能帮助读者解决工作中的实际问题。认真学习完本书的读者,应当可以独立实现Go语言应用开发。
内容简介
Go语言是近几年广受关注的一门新兴编程语言,在设计之初就致力于解决C语言的低效问题,以及C 语言的晦涩、难用等缺陷。Go语言吸收了C、C 强大的开发功能优势,继承了C、C 的编程风格,被广泛应用于构建数字基础设施类软件,以及图形/图像处理、移动应用、人工智能、机器学习等领域,广受国内外大型IT公司的推崇和关注。 本书除了讲解Go语言的基本开发知识,还提供了3个完整的实战项目及131个源码示例。另外,本书提供对应的练习与实验,方便读者对所学知识进行巩固和检验。 本书适合高等院校学生阅读,适合程序员自学,也适合培训机构使用。
目录
- 第1部分 Go语言编程基础
- 第1章 Go语言入门知识 2
- 1.1 Go语言简介 2
- 1.1.1 Go语言的产生 2
- 1.1.2 Go语言的特点与优势 3
- 1.2 Go语言开发工具的安装 5
- 1.2.1 Windows下的安装 6
- 1.2.2 Linux下的安装 10
- 1.2.3 macOS下的安装 13
- 1.3 第一个Go语言程序:Hello三酷猫 13
- 1.4 安装和使用集成开发环境 16
- 1.4.1 集成开发环境的安装 16
- 1.4.2 项目的创建、编译和运行 19
- 1.4.3 代码的出错提示及调试 22
- 1.4.4 代码风格约定 25
- 1.5 关键字和保留字 26
- 1.6 为代码添加注释 27
- 1.6.1 单行注释 27
- 1.6.2 多行注释 28
- 1.7 练习与实验 29
- 第2章 基础语法 30
- 2.1 声明 30
- 2.2 常量与变量 30
- 2.2.1 常量 31
- 2.2.2 变量 32
- 2.2.3 作用域 33
- 2.3 基本数据类型 34
- 2.3.1 整型 34
- 2.3.2 浮点型 36
- 2.3.3 复数型 38
- 2.3.4 布尔型 39
- 2.3.5 字符串型 39
- 2.4 运算符及优先级 42
- 2.4.1 算术运算符 42
- 2.4.2 关系运算符 43
- 2.4.3 逻辑运算符 44
- 2.4.4 位运算符 45
- 2.4.5 赋值运算符 47
- 2.4.6 指针运算符 49
- 2.4.7 优先级 49
- 2.4.8 案例:三酷猫求相加和 50
- 2.5 练习与实验 52
- 第3章 高级数据类型 53
- 3.1 指针类型 53
- 3.1.1 指针的概念 54
- 3.1.2 指针变量的声明 54
- 3.1.3 指针变量的赋值 55
- 3.1.4 访问指针变量所表示的变量的值 55
- 3.1.5 空(nil)指针 56
- 3.1.6 指向指针的指针变量 56
- 3.1.7 案例:解答三酷猫关于指针的困惑 57
- 3.2 数组类型 58
- 3.2.1 数组的概念 59
- 3.2.2 数组的声明与初始化 59
- 3.2.3 访问数组中的元素 62
- 3.2.4 多维数组 62
- 3.2.5 案例:三酷猫计算平均温度 63
- 3.3 切片类型 65
- 3.3.1 切片的概念 65
- 3.3.2 切片的声明与初始化 65
- 3.3.3 空(nil)切片 68
- 3.3.4 访问切片中的元素 68
- 3.3.5 多维切片 69
- 3.3.6 切片的append()函数 69
- 3.3.7 切片的copy()函数 72
- 3.4 集合类型 73
- 3.4.1 集合的概念 73
- 3.4.2 集合的声明与初始化 73
- 3.4.3 集合中元素的检索 75
- 3.4.4 向集合中添加、删除和修改元素 76
- 3.5 结构体类型 77
- 3.5.1 结构体的概念及特点 77
- 3.5.2 结构体的声明 77
- 3.5.3 结构体的使用 78
- 3.6 练习与实验 80
- 第4章 流程控制语法 81
- 4.1 分支结构 81
- 4.1.1 if语句 81
- 4.1.2 if…else…结构 83
- 4.1.3 多分支结构 83
- 4.2 switch…case…分支结构 84
- 4.3 循环结构 86
- 4.3.1 for循环的使用 86
- 4.3.2 多层循环结构 89
- 4.4 跳转控制语句 90
- 4.4.1 break语句 90
- 4.4.2 continue语句 91
- 4.4.3 goto语句 92
- 4.5 for-range结构 93
- 4.5.1 遍历数组与切片 93
- 4.5.2 遍历集合 94
- 4.5.3 遍历字符串 94
- 4.6 案例:三酷猫背九九乘法表 95
- 4.7 案例:三酷猫学算法之冒泡排序 95
- 4.8 练习与实验 96
- 第5章 函数 98
- 5.1 函数的声明 98
- 5.1.1 函数的声明格式 99
- 5.1.2 函数的参数 99
- 5.1.3 可变参数 101
- 5.1.4 函数的返回值 102
- 5.2 函数的调用 103
- 5.2.1 函数的调用格式 103
- 5.2.2 值传递与引用传递 104
- 5.2.3 案例:三酷猫识别数据类型 105
- 5.3 递归函数 106
- 5.4 匿名函数 107
- 5.4.1 匿名函数的声明 107
- 5.4.2 匿名函数的调用 108
- 5.4.3 将匿名函数赋值给变量 108
- 5.4.4 使用匿名函数实现回调 108
- 5.4.5 案例:三酷猫的下载“神器” 109
- 5.5 闭包 110
- 5.6 函数的延迟调用 112
- 5.6.1 延迟调用的使用和特点 112
- 5.6.2 使用延迟调用的注意事项 113
- 5.7 Go语言的异常处理 115
- 5.7.1 运行时宕机 116
- 5.7.2 宕机时恢复 117
- 5.8 案例:三酷猫的面积计算器 118
- 5.9 练习与实验 119
- 第6章 结构体 120
- 6.1 类型 120
- 6.1.1 自定义类型 121
- 6.1.2 自定义别名 121
- 6.2 结构体的基本使用 122
- 6.2.1 结构体的声明及实例化 122
- 6.2.2 匿名结构体 125
- 6.2.3 内存中的结构体变量 126
- 6.2.4 声明并实例化指针类型的结构体变量 127
- 6.3 构造函数与方法 128
- 6.3.1 使用结构体实现构造函数 128
- 6.3.2 方法与接收者 130
- 6.4 结构体的嵌套 133
- 6.4.1 嵌套结构体 133
- 6.4.2 嵌套匿名结构体 134
- 6.4.3 使用结构体实现继承 135
- 6.5 案例:三酷猫开银行 136
- 6.6 练习与实验 138
- 第7章 接口 140
- 7.1 接口概述 140
- 7.2 接口的定义和使用 141
- 7.2.1 接口的定义 141
- 7.2.2 接口的实现 142
- 7.2.3 调用接口方法 145
- 7.2.4 值接收者与指针接收者 146
- 7.2.5 实现多个接口 147
- 7.2.6 接口的嵌套 149
- 7.3 空接口的定义和使用 150
- 7.3.1 空接口的定义 150
- 7.3.2 空接口的使用 151
- 7.4 类型断言 152
- 7.5 练习与实验 153
- 第8章 包 154
- 8.1 包的声明与导入 154
- 8.1.1 包的声明 154
- 8.1.2 包的导入 155
- 8.2 Go应用程序的启动流程 159
- 8.3 创建包 160
- 8.4 Go语言中的常用内置包 161
- 8.4.1 文本格式化输出:fmt包 162
- 8.4.2 磁盘文件读/写:os包 171
- 8.4.3 网络服务:net包 180
- 8.4.4 JSON格式工具包:json包 185
- 8.4.5 时间和日期:time包 188
- 8.4.6 日志服务:log包 192
- 8.4.7 类型转换:strconv包 195
- 8.5 案例:三酷猫的文件夹递归复制工具 199
- 8.6 案例:三酷猫的二维码图片生成器 201
- 8.7 练习与实验 202
- 第9章 并发、并行与协程 204
- 9.1 概念 204
- 9.1.1 进程与线程 204
- 9.1.2 并发与并行 205
- 9.1.3 协程与线程 205
- 9.2 Go语言协程:Goroutine 205
- 9.2.1 使用Goroutine的优势 205
- 9.2.2 创建并启动单个Goroutine 206
- 9.2.3 创建并启动多个Goroutine 209
- 9.3 Go语言调度模型:GPM 210
- 9.3.1 任务调度发展简史 210
- 9.3.2 Go语言中的协程 211
- 9.3.3 GPM设计思想 211
- 9.4 runtime包 213
- 9.4.1 获取当前的操作系统类型和CPU类型 213
- 9.4.2 获取和设置CPU核心数量 214
- 9.4.3 让出资源 215
- 9.4.4 终止当前协程 216
- 9.5 在协程任务之间传递数据:Channel 216
- 9.5.1 通道类型和基本使用 217
- 9.5.2 无缓冲(同步)通道的使用 218
- 9.5.3 带缓冲通道的使用 219
- 9.5.4 判断通道是否关闭 220
- 9.5.5 单向通道的构建 221
- 9.6 select结构 221
- 9.7 加锁和原子操作 223
- 9.7.1 互斥锁 224
- 9.7.2 读/写互斥锁 224
- 9.7.3 原子操作 226
- 9.8 定时器 228
- 9.8.1 Timer 228
- 9.8.2 Ticker 230
- 9.9 案例:三酷猫筛选0~1000范围内的素数 230
- 9.10 练习与实验 232
- 第10章 反射 234
- 10.1 使用反射访问变量 234
- 10.1.1 获取变量的类型 235
- 10.1.2 获取变量的值 236
- 10.1.3 反射值的非空和有效性判定 237
- 10.2 使用反射访问指针表示的变量 237
- 10.3 使用反射访问结构体 238
- 10.4 使用反射修改值 240
- 10.5 使用反射调用函数 243
- 10.6 使用反射创建变量 244
- 10.7 练习与实验 244
- 第11章 命令行工具 246
- 11.1 编译命令go build 246
- 11.2 清理命令go clean 247
- 11.3 运行命令go run 248
- 11.4 代码格式化命令gofmt 249
- 11.5 编译并安装命令go install 250
- 11.6 获取包命令go get 250
- 11.7 练习与实验 251
- 第12章 数据库操作 252
- 12.1 MySQL 252
- 12.1.1 MySQL准备 253
- 12.1.2 增删改查(CRUD)操作 259
- 12.1.3 事务(Transaction)操作 262
- 12.2 Redis 263
- 12.2.1 Redis准备 264
- 12.2.2 Redis数据类型 267
- 12.2.3 使用Go语言对Redis进行操作 268
- 12.3 练习与实验 271
- 第2部分 Go语言项目实战
- 第13章 开发矩阵计算库 274
- 13.1 线性代数基础与项目功能设计 274
- 13.1.1 线性代数知识的简单回顾 274
- 13.1.2 项目功能设计 276
- 13.2 项目初始化与“鸭子类型” 277
- 13.2.1 初始化项目 277
- 13.2.2 定义matrix包的数据类型 278
- 13.2.3 面向对象与Go语言中的“鸭子类型” 278
- 13.3 矩阵计算包matrix的开发 281
- 13.3.1 定义matrix包中的接口 281
- 13.3.2 实现matrix包中的方法 282
- 13.3.3 测试matrix包 288
- 13.3.4 在其他项目中引用matrix包 292
- 13.4 项目总结 294
- 第14章 STL文件解析和MongoDB存储 295
- 14.1 STL文件简介与项目设计 295
- 14.1.1 项目功能需求设定 298
- 14.1.2 项目实现思路 299
- 14.2 开发utils包 299
- 14.2.1 错误处理文件handle.go 300
- 14.2.2 文件操作文件fileoper.go 301
- 14.3 开发用于模型文件处理的stl包 302
- 14.3.1 定义数据类型:type.go文件 303
- 14.3.2 解析STL文件数据:stl.go文件 304
- 14.3.3 安装和配置MongoDB 307
- 14.3.4 操作数据库:db.go文件 310
- 14.4 开发路由函数的handler包 314
- 14.4.1 定义响应数据格式类型的type.go文件 314
- 14.4.2 用于测试服务器程序连通性的ping.go文件 315
- 14.4.3 处理STL数据请求的stl.go文件 316
- 14.5 开发项目入口文件main.go并测试项目 321
- 14.5.1 开发main.go文件 322
- 14.5.2 使用Postman测试整个项目 324