文轩九月图书旗舰店店铺主页二维码
文轩九月图书旗舰店
特价好书,就在文轩网!
微信扫描二维码,访问我们的微信店铺

100个Go语言典型错误

138.00
运费: 免运费
库存: 14 件
100个Go语言典型错误 商品图0
100个Go语言典型错误 商品缩略图0

商品详情

100个Go语言典型错误

作  者:(法)泰瓦·哈尔萨尼 著 Go语言翻译小组 译
定  价:138
出 版 社:电子工业出版社
出版日期:2024年01月01日
页  数:420
装  帧:平装
ISBN:9787121469138

"1. Go语言“入门易,精通难”。 2. 本书包含开发人员在使用Go语言时经常犯的100个典型错误,侧重于语言核心和标准库,而非外部库或框架。 3. 对于大多数错误,提供了具体示例,以说明什么时候容易犯这样的错误。 4. 没有阅读这本书,将是你的第101个错误。 5. 这不适一本教条主义的图书:每个解决方案都详细传达了其适用的上下文。 6. 本书适合具备Go语言基础知识的开发人员阅读。"

目录

1Go:入门易,精通难
1.1Go语言概述
1.2简单不意味着容易
1.3100个Go语言错误
1.3.1bug
1.3.2不必要的复杂性
1.3.3可读性差
1.3.4非很好组织形式
1.3.5API对用户不友好
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.1channel
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.1Go调度
8.2.2并行归并排序
8.3#57:对何时使用channel或互斥锁感到困惑
8.4#58:不理解竞争问题
8.4.1数据竞争与竞争条件
8.4.2Go内存模型
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:没有使用nilchannel
9.7#67:对channel缓冲区大小感到困惑
9.8#68:忘记字符串格式化可能产生的副作用
9.8.1etcd数据竞争
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.2JSON和单调时钟
10.3.3map中的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.1HTTPBody
10.5.2sql.Rows
10.5.3os.File
10.6#80:在响应HTTP请求后忘记加return语句
10.7#81:使用默认的HTTP客户端和服务端
10.7.1HTTP客户端
10.7.2HTTP服务端
总结
11测试
11.1#82:未区分测试种类
11.1.1build标识
11.1.2环境变量
11.1.3短模式
11.2#83:未打开-race开关
11.3#84:未使用测试执行模式
11.3.1parallel标识
11.3.2shuffle标识
11.4#85:未使用表格驱动型测试
11.5#86:在单元测试中休眠
11.6#87:没有有效处理timeAPI
11.7#88:未使用测试工具包
11.7.1httptest包
11.7.2iotest包
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.1CPU架构
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.3sync.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程序的影响
总结
结语

内容介绍

本书介绍了开发者在使用Go语言时常犯的100个典型错误和低效用法,内容侧重于语言核心和标准库。对大多数错误的讨论都提供了具体的示例,以说明在什么时候容易犯这样的错误。这不是一本教条主义的图书,每个解决方案都详细传达了它适用的上下文。
本书适合熟悉Go编程和语法的开发人员阅读。

(法)泰瓦·哈尔萨尼 著 Go语言翻译小组 译

Teiva Harsanyi 是Docker 公司的资深软件工程师。他曾在多个领域工作,包括保险、交通运输及像空中交通管理这样的安全重点行业。他非常热衷于研究Go 语言及如何设计和实现可靠的应用程序。

文轩九月图书旗舰店店铺主页二维码
文轩九月图书旗舰店
特价好书,就在文轩网!
扫描二维码,访问我们的微信店铺

100个Go语言典型错误

手机启动微信
扫一扫购买

收藏到微信 or 发给朋友

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

2. 点击右上角图标

点击右上角分享图标

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

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

微信支付

支付宝

扫一扫购买

收藏到微信 or 发给朋友

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

2. 点击右上角图标

点击右上角分享图标

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

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