极客时间商城店铺主页二维码
极客时间商城
为极致和美好付费
微信扫描二维码,访问我们的微信店铺

全网低价 | 100个Go语言典型错误 | 官方正版 | Go语言的特性 软件的通用编写方法 | 软件项目的组织方法 | 并发程序设计 | 软件测试书 | 电子工业出版社

69.00
运费: 免运费
库存: 5 件
全网低价 | 100个Go语言典型错误 | 官方正版 | Go语言的特性 软件的通用编写方法 | 软件项目的组织方法 | 并发程序设计 | 软件测试书 | 电子工业出版社 商品图0
全网低价 | 100个Go语言典型错误 | 官方正版 | Go语言的特性 软件的通用编写方法 | 软件项目的组织方法 | 并发程序设计 | 软件测试书 | 电子工业出版社 商品图1
全网低价 | 100个Go语言典型错误 | 官方正版 | Go语言的特性 软件的通用编写方法 | 软件项目的组织方法 | 并发程序设计 | 软件测试书 | 电子工业出版社 商品图2
全网低价 | 100个Go语言典型错误 | 官方正版 | Go语言的特性 软件的通用编写方法 | 软件项目的组织方法 | 并发程序设计 | 软件测试书 | 电子工业出版社 商品缩略图0 全网低价 | 100个Go语言典型错误 | 官方正版 | Go语言的特性 软件的通用编写方法 | 软件项目的组织方法 | 并发程序设计 | 软件测试书 | 电子工业出版社 商品缩略图1 全网低价 | 100个Go语言典型错误 | 官方正版 | Go语言的特性 软件的通用编写方法 | 软件项目的组织方法 | 并发程序设计 | 软件测试书 | 电子工业出版社 商品缩略图2

商品详情

书名:100个Go语言典型错误  
定价:138.0  
ISBN:9787121469138  
作者:(法)Teiva Harsanyi(泰瓦·哈尔萨尼)  
版次:*1版  
出版时间:2024-01  

内容提要:  
Go语言"入门易,精通难”。想要用Go语言写出优质的软件,不仅要了解Go语言的语法,还需要对Go语言的特性、软件的通用编写方法、软件项目的组织方法、并发程序设计、软件测试、软件性能优化等方面都有一定的了解。 本书既聚焦于Go语言,又不限于Go语言,介绍了开发者在使用Go语言时经常犯的100个经典错误,内容侧重于语言核心和标准库。对大多数错误的讨论都提供了具体的示例,以说明在什么时候容易犯这样的错误。这不是一本教条主义的图书,每个解决方案都详细传达了它应该适用的上下文。  



作者简介:  
Teiva Harsanyi 是Docker 公司的*深软件工程师,常年研究Go语言及如何设计和实现可靠的应用程序,具有非常丰富的实战经验。  
Go语言翻译小组成员:曾浩浩 、晁岳攀 等,译者均为*深软件工程师,对Go语言编写及软件项目实现有丰富的实战经验。  

媒体评论:  
Go语言100个典型错误宝典  

目录:  
1 Go:入门易,精通难  
1.1 Go 语言概述  
1.2 简单不意味着容易  
1.3 100 个Go 语言错误  
1.3.1 bug  
1.3.2 不必要的复杂性  
1.3.3 可读性差  
1.3.4 非*佳组织形式  
1.3.5 API 对用户不友好  
1.3.6 代码有待优化  
1.3.7 效率低  
总结  
2 代码和项目组织  
2.1 #1:意想不到的变量隐藏  
2.2 #2:不必要的嵌套代码  
2.3 #3:滥用init 函数  
2.3.1 概念  
2.3.2 何时使用init 函数  
2.4 #4:过度使用getter 和setter  
2.5 #5:避免接口污染  
2.5.1 概念  
2.5.2 何时使用接口  
2.5.3 接口污染  
2.6 #6:在生产者端的接口  
2.7 #7:返回接口  
2.8 #8:any 意味着nothing  
2.9 #9:不知道什么时候使用泛型  
2.9.1 概念  
2.9.2 常见的使用方法和误用  
2.10 #10:没有意识到类型嵌入可能存在的问题  
2.11 #11:不使用函数式选项模式  
2.11.1 配置结构体  
2.11.2 生成器模式  
2.11.3 函数式选项模式  
2.12 #12:项目组织混乱  
2.12.1 项目结构  
2.12.2 包组织  
2.13 #13:创建实用程序包  
2.14 #14:忽略包名称冲突  
2.15 #15:缺少代码文档  
2.16 #16:不使用代码检查工具  
总结  
3 数据类型  
3.1 #17:使用八进制字面量会带来混淆  
3.2 #18:容易忽视的整数溢出  
3.2.1 概念  
3.2.2 在递增操作时检测整数溢出  
3.2.3 在加法操作中检测整数溢出  
3.2.4 在乘法操作中检测整数溢出  
3.3 #19:不了解浮点数  
3.4 #20:不了解切片的长度和容量  
3.5 #21:低效的切片初始化  
3.6 #22:对 nil 和空切片的困惑 .  
3.7 #23:未正确检查切片是否为空  
3.8 #24:无法正确复制切片  
3.9 #25:使用append 的副作用  
3.10 #26:切片和内存泄漏  
3.10.1 容量泄漏  
3.10.2 切片和指针  
3.11 #27:低效的 map 初始化  
3.11.1 概念  
3.11.2 初始化  
3.12 #28:map 和内存泄漏  
3.13 #29:比较值时发生的错误  
总结  
4 控制结构  
4.1 #30:忽视在 range 循环中元素被复制的事实  
4.1.1 概念  
4.1.2 值复制  
4.2 #31:忽视 range 循环中参数是如何求值的  
4.2.1 channel  
4.2.2 数组  
4.3 #32:忽视在 range 循环中使用指针元素的影响  
4.4 #33:在 map 迭代过程中做出错误假设  
4.4.1 排序  
4.4.2 在迭代时往 map 中添加数据  
4.5 #34:忽视break 语句是如何工作的  
4.6 #35:在循环中使用defer  
总结  
5 字符串  
5.1 #36:不理解 rune 的概念  
5.2 #37:字符串迭代不准确  
5.3 #38:乱用 trim 函数  
5.4 #39:缺乏优化的字符串连接  
5.5 #40:无用的字符串转换  
5.6 #41:子字符串和内存泄漏  
总结  
6 函数与方法  
6.1 #42:不知道使用什么类型的接收器  
6.2 #43:不要使用命名的结果参数  
6.3 #44:使用命名的结果参数的意外副作用  
6.4 #45:返回一个 nil 接收器  
6.5 #46:使用文件名作为函数输入  
6.6 #47:忽略defer 语句参数和接收器的计算  
6.6.1 参数计算  
6.6.2 指针和值接收器  
总结  
7 错误管理  
7.1 #48:panic  
7.2 #49:搞不清何时需要包装错误  
7.3 #50:不准确的错误类型检查  
7.4 #51:错误地检查错误值  
7.5 #52:处理同一个错误两次  
7.6 #53:忽略错误  
7.7 #54:忽略 defer 语句返回的错误  
总结  
8 并发:基础  
8.1 #55:混淆并发和并行  
8.2 #56:认为并发总是更快  
8.2.1 Go 调度  
8.2.2 并行归并排序  
8.3 #57:对何时使用channel 或互斥锁感到困惑  
8.4 #58:不理解竞争问题  
8.4.1 数据竞争与竞争条件  
8.4.2 Go 内存模型  
8.5 #59:不了解工作负载类型对并发的影响  
8.6 #60:误解 Go 上下文  
8.6.1 *后期限  
8.6.2 取消信号  
8.6.3 上下文值  
8.6.4 感知上下文的取消信号  
总结  
9 并发:实践  
9.1 #61:传播不恰当的上下文  
9.2 #62:在不知道何时停止的情况下启动 goroutine  
9.3 #63:没有小心处理 goroutine 和循环变量  
9.4 #64:使用 select 和channel 来期待确定性行为  
9.5 #65:没有使用通知channel  
9.6 #66:没有使用 nil channel  
9.7 #67:对channel 缓冲区大小感到困惑  
9.8 #68:忘记字符串格式化可能产生的副作用  
9.8.1 etcd 数据竞争  
9.8.2 死锁  
9.9 #69:使用 append 函数创造了数据竞争  
9.10 #70:对切片和 map 不准确地使用互斥锁  
9.11 #71:错误使用 sync.WaitGroup  
9.12 #72:忘记了 sync.Cond  
9.13 #73:没有使用 errgroup  
9.14 #74:复制sync 类型  
总结  
10 标准库  
10.1 #75:提供错误的持续时间  
10.2 #76:time.After 和内存泄漏  
10.3 #77:常见的JSON 处理错误  
10.3.1 由嵌入式字段导致的非预期行为  
10.3.2 JSON 和单调时钟  
10.3.3 map 中的any 类型  
10.4 #78:常见的 SQL 错误  
10.4.1 忘记sql.Open 不一定与数据库建立连接  
10.4.2 忘记连接池导致的问题  
10.4.3 未使用预准备的语句  
10.4.4 对空值处理不当  
10.4.5 没有处理行迭代错误  
10.5 #79:没有关闭瞬时资源  
10.5.1 HTTP Body  
10.5.2 sql.Rows  
10.5.3 os.File  
10.6 #80:在响应HTTP 请求后忘记加return 语句  
10.7 #81:使用默认的HTTP 客户端和服务端  
10.7.1 HTTP 客户端  
10.7.2 HTTP 服务端  
总结  
11 测试  
11.1 #82:未区分测试种类  
11.1.1 build 标识  
11.1.2 环境变量  
11.1.3 短模式  
11.2 #83:未打开-race 开关  
11.3 #84:未使用测试执行模式  
11.3.1 parallel 标识  
11.3.2 shuffle 标识  
11.4 #85:未使用表格驱动型测试  
11.5 #86:在单元测试中休眠  
11.6 #87:没有有效处理 time API  
11.7 #88:未使用测试工具包  
11.7.1 httptest 包  
11.7.2 iotest 包  
11.8 #89:写出不准确的基准测试  
11.8.1 未重置或暂停计时器  
11.8.2 对微基准测试做出错误假设  
11.8.3 未注意编译器优化  
11.8.4 被观察者效应愚弄  
11.9 #90:未探索所有的 Go 测试特性  
11.9.1 代码覆盖率  
11.9.2 从一个不同的包进行测试  
11.9.3 工具函数  
11.9.4 设置和拆卸  
总结  
12 优化  
12.1 #91:不了解 CPU 缓存  
12.1.1 CPU 架构  
12.1.2 缓存行  
12.1.3 包含结构体的切片 vs 包含切片的结构体  
12.1.4 可预测性  
12.1.5 缓存放置策略  
12.2 #92:编写导致伪共享的并发代码  
12.3 #93:不考虑指令级并行性  
12.4 #94:不了解数据对齐  
12.5 #95:不了解栈与堆  
12.5.1 栈 vs 堆  
12.5.2 逃逸分析  
12.6 #96:不了解如何减少分配  
12.6.1 修改 API  
12.6.2 编译器优化  
12.6.3 sync.Pool  
12.7 #97:没有依赖内联  
12.8 #98:没有使用Go 诊断工具  
12.8.1 分析工具  
12.8.2 跟踪工具  
12.9 #99:不了解 GC 的工作原理  
12.9.1 概念  
12.9.2 示例  
12.10 #100:不了解在 Docker 和 Kubernetes 中运行Go 程序的影响  
总结  
结语  

极客时间商城店铺主页二维码
极客时间商城
为极致和美好付费
扫描二维码,访问我们的微信店铺

全网低价 | 100个Go语言典型错误 | 官方正版 | Go语言的特性 软件的通用编写方法 | 软件项目的组织方法 | 并发程序设计 | 软件测试书 | 电子工业出版社

手机启动微信
扫一扫购买

收藏到微信 or 发给朋友

1. 打开微信,扫一扫左侧二维码

2. 点击右上角图标

点击右上角分享图标

3. 发送给朋友、分享到朋友圈、收藏

发送给朋友、分享到朋友圈、收藏

微信支付

支付宝

扫一扫购买

收藏到微信 or 发给朋友

1. 打开微信,扫一扫左侧二维码

2. 点击右上角图标

点击右上角分享图标

3. 发送给朋友、分享到朋友圈、收藏

发送给朋友、分享到朋友圈、收藏