展开全部

主编推荐语

本书很好地阐述了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 总结
展开全部

评分及书评

评分不足
2个评分
  • 用户头像
    给这本书评了
    2.0
    看完了

    翻译得一般,原文可能也不太行。看起来很累,有些前面讲的概念会到很后面才忽然理解。有其他资源还是看其他的吧!

      转发
      评论

    出版方

    机械工业出版社有限公司

    机械工业出版社是全国优秀出版社,自1952年成立以来,坚持为科技、为教育服务,以向行业、向学校提供优质、权威的精神产品为宗旨,以“服务社会和人民群众需求,传播社会主义先进文化”为己任,产业结构不断完善,已由传统的图书出版向着图书、期刊、电子出版物、音像制品、电子商务一体化延伸,现已发展为多领域、多学科的大型综合性出版社,涉及机械、电工电子、汽车、计算机、经济管理、建筑、ELT、科普以及教材、教辅等领域。