• 100个Go语言典型错误
21年品牌 40万+商家 超1.5亿件商品

100个Go语言典型错误

全新正版 假一赔十 可开发票

85.56 6.2折 138 全新

库存20件

北京朝阳
认证卖家担保交易快速发货售后保障

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

出版社电子工业出版社

ISBN9787121469138

出版时间2024-01

装帧平装

开本16开

定价138元

货号1203174654

上书时间2024-05-19

轻阅书店

三年老店
已实名 已认证 进店 收藏店铺

   商品详情   

品相描述:全新
商品描述
作者简介
Teiva Harsanyi 是Docker 公司的资深软件工程师。他曾在多个领域工作,包括保险、交通运输及像空中交通管理这样的安全重点行业。他非常热衷于研究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编程和语法的开发人员阅读。

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

媒体评论
"本书是一本非常实用的技术指南,为Go 语言开发者提供了解决常见问题的宝贵经验。
无论你是初学者还是有经验的开发者,这本书都能帮助你避免常见的陷阱和错误。通过清晰的解释和实用的示例,它能够帮助你更好地理解Go 语言的工作原理,并提供了一些很好实践和技巧。如果你想高效且准确地使用Go 语言进行开发,这本书绝对是你的推荐指南!
谢孟军
GoCN 社区发起人、积梦智能CEO

前几年我就关注到了这本书,作者写得非常好,对于开发者而言有较大的参考和学习意义。Go 已经诞生十多年了,语言的生态已经愈发丰富,其特殊性时常会让开发者感到难以理解并随时会“踩坑”。
本书归类、讲解、总结了7 大类常见的错误,共100 个具体的错误例子。在每个例子中,结合不同的场景进行了有针对性的说明,于学习之余也可以扩展你的技术视野。推荐大家多阅读几遍!
陈剑煜
《Go 语言编程之旅》作者

本书是一本实用且全面的Go 语言指南!本书提供了Go 语言开发中常见问题的深入解析和解决方案。这本书不仅适合初学者,也适用于有经验的开发者。无论你是学习、开发还是优化代码,这本书都会成为你的良师益友。
王中阳
北京字节神话CTO

Go 语言是一门简单的编程语言,有一定编程基础的开发者用一个周末的时间即可迅速
掌握Go 语言的基础知识。但是,简单并不代表容易,即便是已经有一些Go 语言使用经验的开发者,也无法避免使用时出现错误。我们应该认真对待使用Go 语言时常犯的一些错误,比如认真分析错误出现的原因和如何避免,就像在学生时代,我们整理错题本一样。本书作者通过整理100 个错误的“Go 语言错题本”,告诉我们使用Go 语言时需要注意的一些陷阱。
本书适合所有使用Go 语言的开发者阅读,我相信本书不仅可以帮助大家降低使用Go 语言开发项目时出现错误的概率,还可以提升大家使用Go 语言的能力。
魏如博(frank)
公众号“Golang 语言开发栈”主理人

本书作者结合自己多年的Go 开发经验,深入分析了Go 语言的常见错误,并为其进行了归类。无论你是刚入门还是拥有丰富的Go 开发经验,都应该考虑深入探索这本书。因为你不仅会了解到错误本身,还能掌握错误背后的上下文,这能让我们从错误中高效地进行学习。
杨文
Go 夜读创始人

正如作者所言,Go 语言简单易学但难以掌握。本书以100 个典型且全面的例子涵盖了Go 语言开发中的常见错误,并深入探讨了错误发生背后的原因及其对应的解决策略。其中许多例子都非常经典,是实战中的真实反映。通过这种富有吸引力的方式,读者不仅能够洞悉实战中的经典错误,还可以学习如何巧妙地规避它们,并在这一过程中更深入地理解Go语言的特性和很好实践。
郑建勋
《Go 语言底层原理剖析》及《聚沙成塔:Go 语言构建高性能、分布式爬虫项目》作者"

   相关推荐   

—  没有更多了  —

以下为对购买帮助不大的评价

此功能需要访问孔网APP才能使用
暂时不用
打开孔网APP