万本电子书0元读

万本电子书0元读

顶部广告

100个Go语言典型错误电子书

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

售       价:¥

纸质售价:¥109.00购买纸书

46人正在读 | 0人评论 6.4

作       者:(法)Teiva Harsanyi(泰瓦·哈尔萨尼)

出  版  社:电子工业出版社

出版时间:2024-01-01

字       数:20.2万

所属分类: 科技 > 计算机/网络 > 程序设计

温馨提示:数字商品不支持退换货,不提供源文件,不支持导出打印

为你推荐

  • 读书简介
  • 目录
  • 累计评论(0条)
  • 读书简介
  • 目录
  • 累计评论(0条)
Go语言"门易,精通难”。想要用Go语言写出优质的软件,不仅要了解Go语言的语法,还需要对Go语言的特性、软件的通用编写方法、软件项目的组织方法、并发程序设计、软件测试、软件性能优化等方面都有一定的了解。 本书既聚焦于Go语言,又不限于Go语言,介绍了发者在使用Go语言时经常犯的100个经典错误,内容侧重于语言核心和标准库。对大多数错误的讨论都提供了具体的示例,以说明在什么时候容易犯这样的错误。这不是一本教条主义的图书,每个解决方案都详细传达了它应该适用的上下文。<br/>【推荐语】<br/>Go语言“门易,精通难”。 本书包含发人员在使用Go语言时经常犯的100个典型错误,侧重于语言核心和标准库,而非外部库或框架。 对于大多数错误,提供了具体示例,以说明什么时候容易犯这样的错误。 没有阅读这本书,将是你的第101个错误。 这不适一本教条主义的图书:每个解决方案都详细传达了其适用的上下文。 本书适合具备Go语言基础知识的发人员阅读。<br/>【作者】<br/>Teiva Harsanyi 是Docker 公司的资深软件工程师,常年研究Go语言及如何设计和实现可靠的应用程序,具有非常丰富的实战经验。 Go语言翻译小组成员(按姓名首字母排序):晁岳攀、高行、李殿斌、李子昂、马学翔、饶全成、万俊峰、王莹、徐新华、叶王、曾浩浩,译者均为资深软件工程师,对Go语言编写及软件项目实现有丰富的实战经验。<br/>
目录展开

内容简介

本书译者团队

推荐语

推荐序

前言

致谢

关于本书

关于作者

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程序的影响

总结

结语

累计评论(0条) 0个书友正在讨论这本书 发表评论

发表评论

发表评论,分享你的想法吧!

买过这本书的人还买过

读了这本书的人还在读

回顶部