电子工业出版社有限公司店铺主页二维码
电子工业出版社有限公司
电子工业出版社有限公司有赞官方供货商,为客户提供一流的知识产品及服务。
微信扫描二维码,访问我们的微信店铺

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

99.40
运费: 免运费
官方正版 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. 发送给朋友、分享到朋友圈、收藏

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