Go语言学习指南:惯例模式与编程实践

Go语言学习指南:惯例模式与编程实践

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

    关注微信公众号

因版权原因待上架

编辑推荐

本书很好地阐述了Go语言的特性,同时指出了Go语言的惯例代码、陷阱和设计模式。

内容简介

本书语言生动,表述清晰,将Go语言的基本原理与语言哲学联系在一起,引导读者正确编写Go语言。既介绍基础知识,又涵盖高级主题(如反射和C语言互操作),通过大量例子演示了如何写出符合Go语言惯例的代码,解释了可能影响程序行为的底层概念,比如指针对内存布局和垃圾回收的影响。

无论你是Go语言的初学者,还是经验丰富的Go语言从业人员,相信都能从本书中获益良多。

作者简介

作者乔恩·博德纳,拥有20多年的软件工程师、首席开发者和架构师工作经验。他从事过多个领域的软件开发工作,包括教育、金融、商业、医疗保健、法律、政府和互联网基础设施。

Jon是美国Capital One公司的杰出工程师,他为公司的开发和测试工作流做出了巨大贡献,开发了Web支付页面的检测与输入的专利技术,并合作开发了用于发现和管理软件开发问题的工具。

他是Proteus数据访问库的创建者,也是checks-out(LGTM项目的分支)的联合开发者。

章节目录

版权信息

关于作者

关于封面

O'Reilly Media, Inc介绍

业界评论

本书赞誉

推荐序

译者序

前言

第1章 设置Go语言的开发环境

1.1 安装Go工具

1.2 Go的工作空间

1.3 Go命令集

1.3.1 go run和go build

1.3.2 获取第三方Go工具

1.3.3 代码格式化

1.4 分析与审查

1.5 选择开发工具

1.5.1 Visual Studio Code

1.5.2 GoLand

1.5.3 The Go Playground

1.6 Makefile

1.7 保持更新

1.8 总结

第2章 基础类型和变量声明

2.1 内置类型

2.1.1 零值

2.1.2 字面量

2.1.3 布尔型

2.1.4 数值类型

2.1.5 字符串和字符

2.1.6 显式类型转换

2.2 var与:=

2.3 const关键字

2.4 有类型的常量与无类型的常量

2.5 未使用的变量

2.6 常量与变量的命名

2.7 总结

第3章 复合类型

3.1 数组

3.2 切片

3.2.1 len

3.2.2 append

3.2.3 容量

3.2.4 make

3.2.5 切片的声明

3.2.6 派生切片

3.2.7 数组转换为切片

3.2.8 copy

3.3 字符串、字符和字节

3.4 映射

3.4.1 映射的读写操作

3.4.2 逗号和ok模式

3.4.3 从映射中删除

3.4.4 映射模拟集合

3.5 结构体

3.5.1 匿名结构体

3.5.2 比较和转换结构体

3.6 总结

第4章 代码块、影子变量和流程控制

4.1 代码块

4.1.1 变量覆盖

4.1.2 检测影子变量

4.2 if语句

4.3 for语句

4.3.1 使用标准形式

4.3.2 使用条件比较

4.3.3 使用无限循环

4.3.4 break和continue

4.3.5 使用for-range

4.3.6 for语句的标签

4.3.7 for语句最佳实践

4.4 switch语句

4.5 默认的switch语句

4.6 if和switch之间的选择

4.7 goto语句

4.8 总结

第5章 函数

5.1 函数的声明和调用

5.1.1 模拟命名参数和可选参数

5.1.2 可变长输入参数与切片

5.1.3 多返回值

5.1.4 多返回值需要多个值

5.1.5 忽略返回值

5.1.6 命名返回值

5.1.7 永远不要使用空返回值

5.2 函数即值

5.2.1 声明函数类型

5.2.2 匿名函数

5.3 闭包

5.3.1 函数即参数

5.3.2 函数作为返回值

5.4 defer

5.5 函数的值调用

5.6 总结

第6章 指针

6.1 指针快速入门

6.2 不畏惧指针

6.3 指针即可变的参数

6.4 指针作为第二选择

6.5 指针传递可提高性能

6.6 零值与无值

6.7 映射与切片的区别

6.8 切片用作缓冲区

6.9 优化垃圾回收

6.10 总结

第7章 类型、方法与接口

7.1 Go语言的类型

7.2 方法

7.2.1 指针接收者与值接收者

7.2.2 在方法中处理nil实例

7.2.3 方法即函数

7.2.4 方法与函数的区别

7.2.5 类型声明不是一种继承

7.2.6 类型是可执行文档

7.2.7 iota可用于枚举

7.3 使用内嵌进行组合

7.4 内嵌不是继承

7.5 接口概览

7.6 接口是类型安全的鸭子类型

7.7 内嵌与接口

7.8 接收接口,返回结构体

7.9 接口与nil

7.10 空接口

7.11 类型断言与type-switch

7.12 谨慎使用类型断言与type-switch

7.13 函数类型实现接口

7.14 隐式接口实现依赖注入

7.15 Wire

7.16 Go并非传统意义上的面向对象语言

7.17 总结

第8章 错误

8.1 如何处理错误

8.2 使用字符串创建简单错误

8.3 哨兵错误

8.4 错误是值

8.5 包装错误

8.6 Is和As

8.7 使用defer包装错误

8.8 panic和recover

8.9 从错误中获取堆栈跟踪信息

8.10 总结

第9章 模块、包和导入

9.1 仓库、模块和包

9.2 go.mod

9.3 创建包

9.3.1 import和export

9.3.2 包的创建与访问

9.3.3 包的命名

9.3.4 如何组织模块

9.3.5 覆盖包名

9.3.6 包注释和godoc

9.3.7 内部包

9.3.8 尽量避免使用init函数

9.3.9 循环依赖

9.3.10 优雅地重命名和重组API

9.4 模块

9.4.1 导入第三方代码

9.4.2 版本

9.4.3 选择最小版本原则

9.4.4 更新到兼容版本

9.4.5 更新到不兼容版本

9.4.6 vendoring

9.4.7 pkg.go.dev

9.4.8 额外的信息

9.5 模块的发布

9.6 模块的版本控制

9.7 模块代理服务器

9.7.1 指定一个代理服务器

9.7.2 私有仓库

9.8 总结

第10章 Go的并发编程

10.1 何时使用并发编程

10.2 goroutine

10.3 通道

10.3.1 读写和缓冲

10.3.2 通道的for-range

10.3.3 关闭通道

10.3.4 通道的行为

10.4 select语句

10.5 并发实践与模式

10.5.1 API应隐藏并发

10.5.2 goroutine、for循环与变量

10.5.3 防止goroutine泄露

10.5.4 通道结束模式

10.5.5 使用取消函数终止goroutine

10.5.6 缓存通道和无缓存通道

10.5.7 背压

10.5.8 在select中跳过无效分支

10.5.9 如何处理超时

10.5.10 使用WaitGroup

10.5.11 仅执行一次代码

10.5.12 多个并发工具的使用

10.6 何时使用互斥锁

10.7 atomic

10.8 额外资源

10.9 总结

第11章 Go语言标准库

11.1 标准io库

11.2 time

11.2.1 单调时钟时间

11.2.2 计时器和超时

11.3 encoding/json

11.3.1 使用结构体标签添加元数据

11.3.2 序列化与反序列化

11.3.3 JSON、读取和写入

11.3.4 JSON流的编码和解码

11.3.5 自定义JSON解析

11.4 net/http

11.4.1 客户端

11.4.2 服务端

11.5 总结

第12章 上下文

12.1 什么是上下文

12.2 取消

12.3 计时器

12.4 在上下文中处理取消请求

12.5 传递值

12.6 总结

第13章 测试

13.1 测试的基本知识

13.1.1 测试报告

13.1.2 测试环境的准备和清理

13.1.3 保存测试数据样本

13.1.4 缓存测试结果

13.1.5 测试公共API

13.1.6 使用go-cmp比较测试结果

13.2 表格驱动测试

13.3 检查代码覆盖率

13.4 基准测试

13.5 Go中的测试桩

13.6 httptest

13.7 集成测试和编译标签

13.8 使用竞争检测器检查并发问题

13.9 总结

第14章 恶龙禁区:反射、unsafe和cgo

14.1 在运行时使用反射处理类型

14.1.1 类型、类别和值

14.1.2 创建新值

14.1.3 使用反射检查接口的值是否为nil

14.1.4 使用反射编写数据封送处理器

14.1.5 使用反射构建函数来自动化重复的任务

14.1.6 不建议使用反射构建结构体

14.1.7 反射不能创建方法

14.1.8 慎用反射

14.2 unsafe意味着不安全

14.2.1 使用unsafe转换外部二进制数据

14.2.2 使用unsafe操作字符串和切片

14.2.3 unsafe工具

14.3 cgo用于集成,而不是为了性能

14.4 总结

第15章 展望未来:Go中的泛型

15.1 泛型减少冗余代码,提高类型安全性

15.2 Go中的泛型

15.3 类型列表可指定操作符

15.4 泛型函数抽象算法

15.5 类型列表限制常量和实现

15.6 暂不考虑的问题

15.7 惯例模式与泛型

15.8 未来更多可能

15.9 总结

Go语言学习指南:惯例模式与编程实践是2022年由机械工业出版社华章分社出版,作者[美] 乔恩·博德纳。

得书感谢您对《Go语言学习指南:惯例模式与编程实践》关注和支持,如本书内容有不良信息或侵权等情形的,请联系本网站。

购买这本书

你可能喜欢
GO语言开发实战:慕课版 电子书
为对GO语言感兴趣的初学者和爱好者量身定做,从入门到精通,扫码直接看学习视频,并免费提供一站式教学服务包。
用Go语言自制编译器 电子书
放下大部头,换一种方式入门编译原理,体验一步步实现类C语言的乐趣。
R语言编程基础 电子书
《R语言学习手册》:7章全面介绍R语言及Rattle工具,附课后习题。
R语言编程:基于tidyverse 电子书
一本基于tidyverse入门R语言编程的书。
OCaml语言编程基础教程 电子书
OCaml语言是一种函数式程序设计语言。本书重点介绍函数式编程的基础知识以及OCaml程序设计的技巧,同时兼顾应用软件开发的需求。全书共8章,前5章讲解OCaml语言的函数式控制结构、数据结构、模块化程序设计、命令式程序设计和图形程序设计;第6章介绍如何把OCaml移植到F#,第7章介绍通过C#开发的用户界面调用OCaml或F#程序,第8章介绍面向对象程序设计。本书适合想要学习OCaml程序语言或