计算机
类型
7.3
豆瓣评分
可以朗读
语音朗读
269千字
字数
2022-04-01
发行日期
展开全部
主编推荐语
本书很好地阐述了Go语言的特性,同时指出了Go语言的惯例代码、陷阱和设计模式。
内容简介
本书语言生动,表述清晰,将Go语言的基本原理与语言哲学联系在一起,引导读者正确编写Go语言。既介绍基础知识,又涵盖高级主题(如反射和C语言互操作),通过大量例子演示了如何写出符合Go语言惯例的代码,解释了可能影响程序行为的底层概念,比如指针对内存布局和垃圾回收的影响。
无论你是Go语言的初学者,还是经验丰富的Go语言从业人员,相信都能从本书中获益良多。
目录
- 版权信息
- 关于作者
- 关于封面
- 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 总结
展开全部
出版方
机械工业出版社有限公司
机械工业出版社是全国优秀出版社,自1952年成立以来,坚持为科技、为教育服务,以向行业、向学校提供优质、权威的精神产品为宗旨,以“服务社会和人民群众需求,传播社会主义先进文化”为己任,产业结构不断完善,已由传统的图书出版向着图书、期刊、电子出版物、音像制品、电子商务一体化延伸,现已发展为多领域、多学科的大型综合性出版社,涉及机械、电工电子、汽车、计算机、经济管理、建筑、ELT、科普以及教材、教辅等领域。