100个Go语言典型错误

100个Go语言典型错误

查阅电子书
手机扫码
  • 微信扫一扫

    关注微信公众号

因版权原因待上架

编辑推荐

本书介绍了开发者在使用Go语言时经常犯的100个经典错误。

内容简介

Go语言“入门易,精通难”。想要用Go语言写出优质的软件,不仅要了解Go语言的语法,还需要对Go语言的特性、软件的通用编写方法、软件项目的组织方法、并发程序设计、软件测试、软件性能优化等方面都有一定的了解。

本书既聚焦于Go语言,又不限于Go语言,内容侧重于语言核心和标准库。对大多数错误的讨论都提供了具体的示例,以说明在什么时候容易犯这样的错误。这不是一本教条主义的图书,每个解决方案都详细传达了它应该适用的上下文。

作者简介

作者Teiva Harsanyi,是Docker公司的资深软件工程师。他曾在多个领域工作,包括保险、交通运输及像空中交通管理这样的安全重点行业。他非常热衷于研究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程序的影响

总结

结语

100个Go语言典型错误是2024年由电子工业出版社出版,作者[法] Teiva Harsanyi。

得书感谢您对《100个Go语言典型错误》关注和支持,如本书内容有不良信息或侵权等情形的,请联系本网站。

购买这本书

你可能喜欢
用Go语言自制编译器 电子书
放下大部头,换一种方式入门编译原理,体验一步步实现类C语言的乐趣。
Go语言程序设计项目化教程(微课版) 电子书
本书切合现代职业教育计算机类专业教学实际,围绕电商平台开发案例予以深入浅出的项目化设计,夯实读者Go语言基础语法知识点的同时,强化其应用Go语言解决实际工程应用问题的能力,为“零基础”的读者提供全面的Go语言学习入门指导和综合应用实践。本书覆盖Go语言的核心语法和特色功能应用,主要内容包括熟悉Go语言开发环境、学习Go语言基础语法、掌握Go语言函数应用、理解Go语言面向对象、体会Go语言高级特性、
分布式对象存储——原理、架构及Go语言实现 电子书
适读人群 :本书适合从事云存储方面工作的工程师或架构师,也适合想要学习和实现分布式对象存储的读者。   赠送价值249元的云存储专家视频课程   掌握云存储理论,动手搭建分布式对象存储架构   云存储已经是大家司空见惯的一种网络服务了,比如大家常用的百度云盘、美亚S3、微软的OneDrive、苹果公司的iCloud和谷歌的Google Cloud等。云存储背后的原理是怎样的,又是如何实现的呢?   本书完全从云存储的需求出发讲述对象存储的原理,并且带领读者使用Go语言编程,循序渐进、从无到有地建立起一个分布式对象存储的架构。也就是说,本书首先介绍为什么要这么做,然后解释怎么做。   本书适合云存储方面的研究者、工程师或架构师阅读,也可以供对云存储技术感兴趣的读者参考。在读完本书之后,你将较为深入地理解对象存储服务,甚至能够实现自己的对象存储服务。   本书包括以下内容:    对象存储简介;    分布式系统原理;    元数据以及元数据服务;    数据校验和去重;    数据冗余和即时修复;    断点续传;    数据压缩;    数据维护。
51单片机典型项目实战全能一本通(C语言版) 电子书
本书采用案例设计的形式,介绍了AT89S51单片机各种应用案例的C51程序设计,为初学者掌握AT89S51单片机片内功能部件与各种接口的软硬件设计提供了很好的借鉴,为快速掌握AT89S51单片机的C51程序设计,本书提供了许多可供参考的程序。本书从应用角度介绍了开关、键盘检测以及LED数码管、LCD的显示控制案例;单片机片内的中断系统、定时器、串行口的各种应用案例设计;单片机系统的并行与串行扩展技
自制编程语言 电子书
适读人群 :适合对编译原理及语言处理器设计有兴趣的读者以及正在学习相关课程的大中专院校学生。 前百度高 级工程师、专业书《操作系统真相还原》的作者的又一力作 业界专家联名推荐 滴滴系统部技术高 级总监于晓声 阿里巴巴蚂蚁金服技术专家肖金亮 百度资 深运维工程师陈晓聪 360企业安全集团政企云事业部技术总监冯顾 ACFUN高 级运维总监陆景玉 Mobvista运维总监黄梦溪 手把手地教读者从零去实现一门语言,从原理到实践事无巨细 每一步都有实际的代码和详尽的原理说明,读者可以很轻松地掌握各个实现细节 实现脚本语言重要的垃圾回收(GC)、虚拟机(VM)和线程等黑技术都在本书一一呈现