GO语言编程指南9787115636218
正版图书,可开发票,请放心购买。
¥
75.14
6.3折
¥
119.8
全新
仅1件
作者 [美]马克·贝茨(Mark Bates)
出版社 人民邮电出版社
ISBN 9787115636218
出版时间 2024-06
装帧 平装
开本 16开
定价 119.8元
货号 16707549
上书时间 2024-11-07
商品详情
品相描述:全新
商品描述
作者简介 马克·贝茨 Gopher Guides 的联合创始人和讲师。Gopher Guides 是 Go 语言培训、咨询和会议研讨方面的行业先驱。自 2000年以来,马克·贝茨一直与世界上一些规模很大且具有创新性的公司合作,包括苹果、Uber 和 Visa。马克·贝茨于 2013 年发现了 Go 语言并在世界各地组织、主持 Go 语言会议,或在 Go 语言会议上发言,他经常参加 Go Time 播客节目。 科瑞·拉诺 Gopher Guides 的联合创始人和讲师。在过去的 20 年里,他一直专注于初创企业的全栈技术。科瑞·拉诺与 Go 语言有很深的渊源,曾发起 Go 聚会——Denver Gophers。他利用自己在 InfluxDB(一个用Go 语言编写的高可扩展的数据库)等项目上的实际经验,开设了大量实用的 Go 语言培训课程,并发表了许多相关文章。 目录 目录 第 1章 模块、包和依赖1 1.1 模块1 1.1.1 工具链2 1.1.2 初始化一个模块3 1.1.3 版本控制系统与模块3 1.2 包4 1.2.1 什么是包4 1.2.2 包命名4 1.3 文件夹、文件与代码组织6 1.3.1 同一文件夹下的多个包7 1.3.2 文件命名8 1.3.3 包组织8 1.4 导入包和模块11 1.4.1 导入路径12 1.4.2 使用import关键字13 1.4.3 解决导入包的名字冲突问题13 1.5 依赖15 1.5.1 使用依赖15 1.5.2 使用go get添加依赖16 1.5.3 go.sum文件18 1.5.4 更新依赖19 1.5.5 语义版本20 1.5.6 多版本20 1.5.7 循环导入21 1.6 本章小结23 第 2章 Go语言基础24 2.1 Go语言概述24 2.1.1 静态类型24 2.1.2 垃圾回收25 2.1.3 编译25 2.1.4 关键字、运算符和分隔符26 2.2 数值27 2.2.1 选择正确的数值类型28 2.2.2 溢出和绕回28 2.2.3 饱和30 2.3 字符串30 2.3.1 解释型字符串字面值30 2.3.2 原始字符串字面值31 2.4 UTF-832 2.4.1 rune33 2.4.2 遍历UTF-8字符串33 2.5 变量35 2.5.1 变量声明35 2.5.2 变量赋值35 2.5.3 零值36 2.5.4 nil37 2.5.5 零值速查表37 2.5.6 变量声明与初始化38 2.5.7 多变量赋值39 2.5.8 未使用的变量40 2.6 常量41 2.6.1 带类型的常量43 2.6.2 无类型常量(推断类型)43 2.6.3 类型推断44 2.7 标识符命名45 2.7.1 命名风格46 2.7.2 与包名冲突47 2.7.3 通过首字母大写实现标识符导出50 2.8 打印与格式化50 2.8.1 格式化函数50 2.8.2 换行52 2.8.3 使用Println打印多个参数53 2.8.4 使用格式化函数53 2.8.5 转义序列53 2.8.6 格式化字符串55 2.8.7 格式化整型55 2.8.8 格式化浮点型57 2.8.9 打印值的类型58 2.8.10 打印值59 2.8.11 打印值的更多细节59 2.8.12 以Go语法格式打印值60 2.8.13 错误使用格式化控制符61 2.8.14 显式的实参索引62 2.8.15 字符串与数值的相互转换63 2.9 本章小结65 第3章 数组、切片和迭代66 3.1 列表类型:数组与切片66 3.1.1 数组与切片的差异66 3.1.2 识别差异67 3.1.3 初始化数组与切片68 3.1.4 数组与切片的零值69 3.1.5 数组与切片的索引70 3.1.6 数组与切片类型71 3.1.7 数组与切片类型的定义71 3.1.8 设置数组与切片变量的值72 3.1.9 向切片追加元素73 3.1.10 向切片追加一个切片74 3.2 切片的工作原理77 3.2.1 长度与容量78 3.2.2 切片的扩容79 3.2.3 使用make函数创建切片81 3.2.4 使用带长度和容量参数的make函数82 3.2.5 make与append函数83 3.2.6 切片扩容时发生了什么83 3.2.7 子切片85 3.2.8 修改子切片85 3.2.9 复制切片86 3.2.10 将数组转换为切片88 3.3 迭代89 3.3.1 for循环89 3.3.2 迭代数组与切片90 3.3.3 range关键字90 3.3.4 控制循环91 3.3.5 do-while循环93 3.4 本章小结94 第4章 map和控制结构95 4.1 map95 4.1.1 长度和容量96 4.1.2 初始化map97 4.1.3 未初始化的map97 4.1.4 map的键98 4.1.5 以结构体作为键98 4.1.6 迭代map99 4.1.7 删除map中的键101 4.1.8 不存在的map键102 4.1.9 检查map中的键是否存在103 4.1.10 利用零值103 4.1.11 仅测试键的存在性104 4.1.12 map和复杂值105 4.1.13 插入时复制106 4.1.14 列出map中的键108 4.2 if语句111 4.2.1 else语句111 4.2.2 else if 语句112 4.2.3 赋值作用域113 4.2.4 逻辑和数学运算符115 4.3 switch语句116 4.3.1 default118 4.3.2 fallthrough119 4.4 本章小结120 第5章 函数121 5.1 函数定义121 5.1.1 参数121 5.1.2 相同类型的参数122 5.1.3 返回值123 5.1.4 多返回值123 5.1.5 具名返回值125 5.1.6 作为一等公民的函数126 5.1.7 闭包127 5.1.8 匿名函数128 5.1.9 接受其他函数的返回值作为参数129 5.2 可变参数129 5.2.1 可变参数的位置130 5.2.2 扩展切片131 5.2.3 何时使用可变参数132 5.3 延迟函数调用133 5.3.1 多个返回路径下的延迟执行133 5.3.2 延迟函数调用的执行顺序134 5.3.3 延迟函数调用与panic135 5.3.4 defer与Exit/Fatal135 5.3.5 defer与匿名函数136 5.3.6 defer与作用域137 5.4 init函数139 5.4.1 多个init函数139 5.4.2 init函数的执行顺序140 5.4.3 利用init函数的导入副作用140 5.5 本章小结142 第6章 结构体、方法和指针143 6.1 结构体143 6.1.1 在Go语言中声明新类型143 6.1.2 定义结构体144 6.1.3 初始化结构体145 6.1.4 不带字段名的初始化146 6.1.5 访问结构体字段147 6.1.6 结构体标签148 6.1.7 编码用的结构体标签148 6.1.8 使用结构体标签150 6.2 方法150 6.2.1 方法与函数的不同151 6.2.2 方法表达式151 6.2.3 第三方类型的方法152 6.2.4 函数作为类型154 6.2.5 函数的方法154 6.2.6 没有继承155 6.3 指针156 6.3.1 值传递156 6.3.2 接收指针158 6.3.3 获取指针158 6.3.4 传递指针159 6.3.5 使用指针160 6.3.6 值接收者与指针接收者161 6.3.7 new函数162 6.3.8 性能163 6.3.9 nil接收者164 6.3.10 nil接收者检查165 6.4 本章小结166 第7章 测试167 7.1 测试基础167 7.1.1 命名167 7.1.2 testing.T类型168 7.1.3 标记测试失败169 7.1.4 使用t.Error170 7.1.5 使用T.Fatal(推荐)172 7.1.6 精心编写测试失败的信息173 7.2 代码覆盖率174 7.2.1 代码覆盖率基础174 7.2.2 生成覆盖率报告174 7.2.3 go tool cover命令175 7.2.4 生成HTML覆盖率报告176 7.2.5 编辑器支持177 7.3 表驱动测试178 7.3.1 表驱动测试剖析178 7.3.2 编写表驱动测试179 7.3.3 子测试181 7.3.4 子测试剖析181 7.3.5 编写子测试182 7.4 运行测试183 7.4.1 运行指定包的测试183 7.4.2 运行当前包及子包中的测试183 7.4.3 输出测试详细信息183 7.4.4 在测试中输出日志184 7.4.5 短测试185 7.4.6 并行运行包测试186 7.4.7 并行运行测试186 7.4.8 运行特定的测试187 7.4.9 设置测试超时时间188 7.4.10 快速失败189 7.4.11 禁用测试缓存190 7.5 测试辅助函数190 7.5.1 定义测试辅助函数190 7.5.2 将函数标记为测试辅助函数194 7.5.3 清理测试辅助函数的资源195 7.6 本章小结196 第8章 接口197 8.1 具体类型VS.接口197 8.2 显式接口实现199 8.3 隐式接口实现200 8.4 使用接口之前201 8.5 使用接口202 8.6 实现io.Writer接口204 8.7 多个接口206 8.8 断言接口实现206 8.9 空接口207 8.9.1 any 关键字207 8.9.2 空接口的问题207 8.9.3 使用空接口208 8.10 定义接口208 8.10.1 定义Model接口209 8.10.2 实现接口211 8.11 嵌入接口212 8.12 类型断言214 8.12.1 对断言进行断言214 8.12.2 断言具体类型215 8.13 通过switch语句进行断言215 8.13.1 捕获switch语句中的类型断言结果216 8.13.2 注意case子句的顺序216 8.14 使用断言217 8.14.1 定义回调接口218 8.14.2 代码拆解分析219 8.15 本章小结219 第9章 错误220 9.1 错误作为值220 9.1.1 error 接口222 9.1.2 处理错误223 9.1.3 使用错误224 9.2 panic225 9.2.1 引发panic225 9.2.2 从panic状态恢复226 9.2.3 捕获并返回panic值229 9.3 不要主动抛出panic232 9.3.1 检查nil233 9.3.2 创建map235 9.3.3 指针237 9.3.4 接口238 9.3.5 函数241 9.3.6 类型断言242 9.3.7 数组/切片的索引244 9.4 自定义错误246 9.4.1 标准错误247 9.4.2 实现自定义错误248 9.5 包装错误和解包装错误250 9.5.1 包装错误252 9.5.2 解包装错误253 9.5.3 解包装自定义错误254 9.5.4 包装或者不包装257 9.6 errors.As和errors.Is函数257 9.6.1 As函数258 9.6.2 Is函数260 9.7 栈跟踪信息262 9.8 本章小结263 第 10章 泛型264 10.1 什么是泛型264 10.1.1 接口存在的问题264 10.1.2 类型约束268 10.1.3 多重泛型类型269 10.1.4 实例化泛型函数271 10.1.5 定义约束272 10.1.6 多类型约束273 10.1.7 底层类型约束275 10.1.8 constraints包277 10.1.9 类型断言279 10.1.10 混合使用方法约束和类型约束281 10.1.11 泛型类型281 10.2 本章小结284 第 11章 通道285 11.1 并发和并行285 11.1.1 并发不等于并行286 11.1.2 理解并发286 11.2 Go语言中的并发模型287 11.2.1 goroutine288 11.2.2 goroutine的内存288 11.2.3 Go调度器288 11.2.4 工作共享和窃取289 11.2.5 不要担心调度器290 11.2.6 goroutine示例291 11.3 使用通道通信291 11.3.1 什么是通道291 11.3.2 了解通道阻塞/解除阻塞292 11.3.3 创建通道292 11.3.4 发送和接收值293 11.3.5 一个简单的通道示例294 11.3.6 在通道上使用range295 11.3.7 使用select语句监听通道296 11.3.8 使用select语句296 11.3.9 通道不是消息队列297 11.4 单向通道298 11.5 关闭通道299 11.5.1 在读取消息时检测关闭的通道301 11.5.2 从已关闭的通道中读取数据时返回零值302 11.5.3 关闭一个已经关闭的通道303 11.5.4 向已关闭通道中写入数据304 11.6 带缓冲的通道305 11.6.1 简单的带缓冲的通道示例305 11.6.2 从关闭的带缓冲的通道中读取消息307 11.7 使用通道捕获系统信号308 11.7.1 os/signal包309 11.7.2 实现优雅地关闭310 11.7.3 监听系统信号312 11.7.4 监听关闭确认消息313 11.7.5 超时无响应关闭314 11.8 本章小结315 第 12章 Context316 12.1 context.Context接口317 12.1.1 Context的Deadline方法317 12.1.2 Context的Done方法317 12.1.3 Context的Err方法318 12.1.4 Context的Value方法319 12.1.5 辅助函数320 12.1.6 初始Context321 12.1.7 默认实现322 12.2 Context规则322 12.3 Context节点层级323 12.3.1 理解节点层级323 12.3.2 用Context值包装324 12.3.3 接续Context节点324 12.4 Context传值326 12.4.1 理解Context传值326 12.4.2 键解析328 12.5 字符串作为键存在的问题329 12.5.1 键冲突330 12.5.2 自定义字符串键类型331 12.6 保护Context中的键和值333 12.7 用Context传播取消事件336 12.7.1 创建可取消的Context337 12.7.2 取消Context338 12.7.3 监听取消确认340 12.8 超时和截止时间344 12.8.1 在指定时间点取消344 12.8.2 一段时间后取消345 12.9 Context错误346 12.9.1 Context取消错误347 12.9.2 超出截止时间错误348 12.10 使用Context监听系统信号349 12.11 本章小结353 第 13章 同步354 13.1 使用WaitGroup等待goroutine354 13.1.1 问题354 13.1.2 使用WaitGroup355 13.1.3 Wait方法356 13.1.4 Add方法357 13.1.5 Done方法361 13.1.6 关于WaitGroup的小结365 13.2 使用errgroup.Group进行错误管理367 13.2.1 问题367 13.2.2 errgroup.Group类型369 13.2.3 监听errgroup.Group类型的取消371 13.2.4 关于errgroup.Group类型的小结373 13.3 数据竞争375 13.3.1 竞争检测器377 13.3.2 大多数,但不是全部378 13.3.3 关于竞争检测器的小结378 13.4 使用互斥锁同步访问379 13.4.1 sync.Locker接口381 13.4.2 使用互斥锁382 13.4.3 读写互斥锁384 13.4.4 不当使用386 13.4.5 有关读/写互斥锁的小结389 13.5 仅执行一次任务389 13.5.1 问题390 13.5.2 实现一次性操作391 13.5.3 使用Once关闭通道393 13.6 本章小结395 第 14章 使用文件396 14.1 目录项和文件信息396 14.1.1 读取目录397 14.1.2 fs.FileInfo接口399 14.1.3 获取文件状态400 14.2 遍历目录401 14.3 跳过目录和文件404 14.4 创建目录和子目录408 14.5 文件路径辅助函数410 14.5.1 获取文件的扩展名411 14.5.2 获取文件所在的目录411 14.5.3 获取文件或目录的名字412 14.5.4 使用文件路径辅助函数412 14.5.5 检查错误413 14.6 创建多个目录415 14.7 创建文件417 14.8 修复遍历测试422 14.9 向文件中追加内容424 14.10 读文件427 14.11 注意Windows系统428 14.12 fs包429 14.12.1 fs.FS接口430 14.12.2 fs.File接口431 14.13 使用fs.FS接口432 14.14 模拟文件系统435 14.15 嵌入文件438 14.15.1 使用嵌入文件439 14.15.2 将文件嵌入二进制文件中441 14.15.3 修改嵌入的文件442 14.15.4 将文件作为string或者byte切片嵌入443 14.16 本章小结443 内容摘要 本书涵盖了 Go 语言的基础语法、核心概念、惯用法和高级特性,并提供了丰富的代码示例,旨在帮助开发人员快速上手 Go 语言编程。 本书首先介绍了 Go 语言如何管理包、模块和依赖,帮助读者建立良好的项目结构。接着介绍了字符串、变量和常量等基础知识。随后详细介绍了 Go 语言中的复合类型,如数组、切片、map、控制结构、函数、结构体、方法和指针等的正确使用方法。之后传授了编写高质量测试代码的方法,并介绍了 Go 语言的接口和新的泛型功能及其使用方法。并发编程是 Go 语言的重要特性,本书最后专门介绍了如何利用并发提升代码性能,并详细讲解了通道、Context 及其他高级同步原语的使用方法。 本书根据作者的 Gopher Guides 培训课程编写,适合 Go 语言初学者和具备其他编程语言知识的开发人员学习和参考,也可作为高等院校相关专业的教学参考书。 主编推荐 1. 以实现健壮、可靠、性能良好的代码为目的。 2. 作者团队有丰富的Go语言培训经验,其培训平台Gopher Guides已使10000多名学生受益。 3. 涵盖 Go 语言截至 1.18 版本的所有内容,包括 Go 语言对新泛型特性的支持。
— 没有更多了 —
本店暂时无法向该地区发货
以下为对购买帮助不大的评价