豆瓣高分
类型
9.1
豆瓣评分
可以朗读
语音朗读
201千字
字数
2024-01-01
发行日期
展开全部
主编推荐语
本书介绍了开发者在使用Go语言时经常犯的100个经典错误。
内容简介
Go语言“入门易,精通难”。想要用Go语言写出优质的软件,不仅要了解Go语言的语法,还需要对Go语言的特性、软件的通用编写方法、软件项目的组织方法、并发程序设计、软件测试、软件性能优化等方面都有一定的了解。
本书既聚焦于Go语言,又不限于Go语言,内容侧重于语言核心和标准库。对大多数错误的讨论都提供了具体的示例,以说明在什么时候容易犯这样的错误。这不是一本教条主义的图书,每个解决方案都详细传达了它应该适用的上下文。
目录
- 版权信息
- 内容简介
- 本书译者团队
- 推荐语
- 推荐序
- 前言
- 致谢
- 关于本书
- 关于作者
- 1 Go:入门易,精通难
- 1.1 Go语言概述
- 1.2 简单不意味着容易
- 1.3 100个Go语言错误
- 总结
- 2 代码和项目组织
- 2.1#1: 意想不到的变量隐藏
- 2.2#2: 不必要的嵌套代码
- 2.3#3: 滥用init函数
- 2.4#4: 过度使用getter和setter
- 2.5#5: 避免接口污染
- 2.6#6: 在生产者端的接口
- 2.7#7: 返回接口
- 2.8#8: any意味着nothing
- 2.9#9: 不知道什么时候使用泛型
- 2.10#10: 没有意识到类型嵌入可能存在的问题
- 2.11#11: 不使用函数式选项模式
- 2.12#12: 项目组织混乱
- 2.13#13: 创建实用程序包
- 2.14#14: 忽略包名称冲突
- 2.15#15: 缺少代码文档
- 2.16#16: 不使用代码检查工具
- 总结
- 3 数据类型
- 3.1#17: 使用八进制字面量会带来混淆
- 3.2#18: 容易忽视的整数溢出
- 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.11#27: 低效的map初始化
- 3.12#28: map和内存泄漏
- 3.13#29: 比较值时发生的错误
- 总结
- 4 控制结构
- 4.1#30: 忽视在range循环中元素被复制的事实
- 4.2#31: 忽视range循环中参数是如何求值的
- 4.3#32: 忽视在range循环中使用指针元素的影响
- 4.4#33: 在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语句参数和接收器的计算
- 总结
- 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.3#57: 对何时使用channel或互斥锁感到困惑
- 8.4#58: 不理解竞争问题
- 8.5#59: 不了解工作负载类型对并发的影响
- 8.6#60: 误解Go上下文
- 总结
- 9 并发:实践
- 9.1#61: 传播不恰当的上下文
- 9.2#62: 在不知道何时停止的情况下启动goroutine
- 9.3#63: 没有小心处理oroutine和循环变量
- 9.4#64: 使用select和channel来期待确定性行为
- 9.5#65: 没有使用通知channel
- 9.6#66: 没有使用nil channel
- 9.7#67: 对channel缓冲区大小感到困惑
- 9.8#68: 忘记字符串格式化可能产生的副作用
- 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.4#78: 常见的SQL错误
- 10.5#79: 没有关闭瞬时资源
- 10.6#80: 在响应HTTP请求后忘记加return语句
- 10.7#81: 使用默认的HTTP客户端和服务端
- 总结
- 11 测试
- 11.1#82: 未区分测试种类
- 11.2#83: 未打开-race开关
- 11.3#84: 未使用测试执行模式
- 11.4#85: 未使用表格驱动型测试
- 11.5#86: 在单元测试中休眠
- 11.6#87: 没有有效处理time API
- 11.7#88: 未使用测试工具包
- 11.8#89: 写出不准确的基准测试
- 11.9#90: 未探索所有的Go测试特性
- 总结
- 12 优化
- 12.1#91: 不了解CPU缓存
- 12.2#92: 编写导致伪共享的并发代码
- 12.3#93: 不考虑指令级并行性
- 12.4#94: 不了解数据对齐
- 12.5#95: 不了解栈与堆
- 12.6#96: 不了解如何减少分配
- 12.7#97: 没有依赖内联
- 12.8#98: 没有使用Go诊断工具
- 12.9#99: 不了解GC的工作原理
- 12.10#100: 不了解在Docker和Kubernetes中运行Go程序的影响
- 总结
- 结语
展开全部
出版方
电子工业出版社
电子工业出版社成立于1982年10月,是国务院独资、工信部直属的中央级科技与教育出版社,是专业的信息技术知识集成和服务提供商。经过三十多年的建设与发展,已成为一家以科技和教育出版、期刊、网络、行业支撑服务、数字出版、软件研发、软科学研究、职业培训和教育为核心业务的现代知识服务集团。出版物内容涵盖了电子信息技术的各个分支及工业技术、经济管理、科普与少儿、社科人文等领域,综合出版能力位居全国出版行业前列。