展开全部

主编推荐语

Go圈知名架构师和布道者撰写,3大Go社区力荐,哲学、思维、技巧等66个主题快速帮你写出高质量代码。

内容简介

Go入门容易,精进难,如何才能像Go开发团队那样写出符合Go思维和语言惯例的高质量代码呢?

本书将从编程思维和实践技巧2个维度给出答案,帮助你在Go进阶的路上事半功倍。

编程思维层面:只有真正领悟了一门语言的设计哲学和编程思维,并能将之用于实践,才算精通了这门语言。本书从Go语言设计者的视角对Go背后的设计哲学和编程思想进行了梳理和分析,指引读者体会那些看似随意实则经过深思熟虑的设计背后的秘密。

实践技巧层面:实践技巧源于对Go开发团队和Go社区开发的高质量代码的阅读、挖掘和归纳,从项目结构、代码风格、语法及其实现、接口、并发、同步、错误与异常处理、测试与调试、性能优化、标准库、第三方库、工具链、Z佳实践、工程实践等多个方面给出了改善Go代码质量、写出符合Go思维和惯例的代码的有效实践。

全书的内容覆盖10个大类,共66个主题,字字珠玑,句句箴言。学完这本书,你将拥有和Go专家一样的编程思维,写出符合Go惯例和风格的高质量代码,从众多Go初学者中脱颖而出,快速实现从Go新手到专家的转变!

目录

  • 版权信息
  • 作者简介
  • 推荐语
  • 推荐序
  • 前言
  • 第一部分 熟知Go语言的一切
  • 第1条 了解Go语言的诞生与演进
  • 1.1 Go语言的诞生
  • 1.2 Go语言的早期团队和演进历程
  • 1.3 Go语言正式发布并开源
  • 第2条 选择适当的Go语言版本
  • 2.1 Go语言的先祖
  • 2.2 Go语言的版本发布历史
  • 2.3 Go语言的版本选择建议
  • 第3条 理解Go语言的设计哲学
  • 3.1 追求简单,少即是多
  • 3.2 偏好组合,正交解耦
  • 3.3 原生并发,轻量高效
  • 3.4 面向工程,“自带电池”
  • 第4条 使用Go语言原生编程思维来写Go代码
  • 4.1 语言与思维——来自大师的观点
  • 4.2 现实中的“投影”
  • 4.3 Go语言原生编程思维
  • 第二部分 项目结构、代码风格与标识符命名
  • 第5条 使用得到公认且广泛使用的项目结构
  • 5.1 Go项目的项目结构
  • 5.2 Go语言典型项目结构
  • 第6条 提交前使用gofmt格式化源码
  • 6.1 gofmt:Go语言在解决规模化问题上的最佳实践
  • 6.2 使用gofmt
  • 6.3 使用goimports
  • 6.4 将gofmt/goimports与IDE或编辑器工具集成
  • 第7条 使用Go命名惯例对标识符进行命名
  • 7.1 简单且一致
  • 7.2 利用上下文环境,让最短的名字携带足够多的信息
  • 第三部分 声明、类型、语句与控制结构
  • 第8条 使用一致的变量声明形式
  • 8.1 包级变量的声明形式
  • 8.2 局部变量的声明形式
  • 第9条 使用无类型常量简化代码
  • 9.1 Go常量溯源
  • 9.2 有类型常量带来的烦恼
  • 9.3 无类型常量消除烦恼,简化代码
  • 第10条 使用iota实现枚举常量
  • 第11条 尽量定义零值可用的类型
  • 11.1 Go类型的零值
  • 11.2 零值可用
  • 第12条 使用复合字面值作为初值构造器
  • 12.1 结构体复合字面值
  • 12.2 数组/切片复合字面值
  • 12.3 map复合字面值
  • 第13条 了解切片实现原理并高效使用
  • 13.1 切片究竟是什么
  • 13.2 切片的高级特性:动态扩容
  • 13.3 尽量使用cap参数创建切片
  • 第14条 了解map实现原理并高效使用
  • 14.1 什么是map
  • 14.2 map的基本操作
  • 14.3 map的内部实现
  • 14.4 尽量使用cap参数创建map
  • 第15条 了解string实现原理并高效使用
  • 15.1 Go语言的字符串类型
  • 15.2 字符串的内部表示
  • 15.3 字符串的高效构造
  • 15.4 字符串相关的高效转换
  • 第16条 理解Go语言的包导入
  • 16.1 Go程序构建过程
  • 16.2 究竟是路径名还是包名
  • 16.3 包名冲突问题
  • 第17条 理解Go语言表达式的求值顺序
  • 17.1 包级别变量声明语句中的表达式求值顺序
  • 17.2 普通求值顺序
  • 17.3 赋值语句的求值
  • 17.4 switch/select语句中的表达式求值
  • 第18条 理解Go语言代码块与作用域
  • 18.1 Go代码块与作用域简介
  • 18.2 if条件控制语句的代码块
  • 18.3 其他控制语句的代码块规则简介
  • 第19条 了解Go语言控制语句惯用法及使用注意事项
  • 19.1 使用if控制语句时应遵循“快乐路径”原则
  • 19.2 for range的避“坑”指南
  • 19.3 break跳到哪里去了
  • 19.4 尽量用case表达式列表替代fallthrough
  • 第四部分 函数与方法
  • 第20条 在init函数中检查包级变量的初始状态
  • 20.1 认识init函数
  • 20.2 程序初始化顺序
  • 20.3 使用init函数检查包级变量的初始状态
  • 第21条 让自己习惯于函数是“一等公民”
  • 21.1 什么是“一等公民”
  • 21.2 函数作为“一等公民”的特殊运用
  • 第22条 使用defer让函数更简洁、更健壮
  • 22.1 defer的运作机制
  • 22.2 defer的常见用法
  • 22.3 关于defer的几个关键问题
  • 第23条 理解方法的本质以选择正确的receiver类型
  • 23.1 方法的本质
  • 23.2 选择正确的receiver类型
  • 23.3 基于对Go方法本质的理解巧解难题
  • 第24条 方法集合决定接口实现
  • 24.1 方法集合
  • 24.2 类型嵌入与方法集合
  • 24.3 defined类型的方法集合
  • 24.4 类型别名的方法集合
  • 第25条 了解变长参数函数的妙用
  • 25.1 什么是变长参数函数
  • 25.2 模拟函数重载
  • 25.3 模拟实现函数的可选参数与默认参数
  • 25.4 实现功能选项模式
  • 第五部分 接口
  • 第26条 了解接口类型变量的内部表示
  • 26.1 nil error值!= nil
  • 26.2 接口类型变量的内部表示
  • 26.3 输出接口类型变量内部表示的详细信息
  • 26.4 接口类型的装箱原理
  • 第27条 尽量定义小接口
  • 27.1 Go推荐定义小接口
  • 27.2 小接口的优势
  • 27.3 定义小接口可以遵循的一些点
  • 第28条 尽量避免使用空接口作为函数参数类型
  • 第29条 使用接口作为程序水平组合的连接点
  • 29.1 一切皆组合
  • 29.2 垂直组合回顾
  • 29.3 以接口为连接点的水平组合
  • 第30条 使用接口提高代码的可测试性
  • 30.1 实现一个附加免责声明的电子邮件发送函数
  • 30.2 使用接口来降低耦合
  • 第六部分 并发编程
  • 第31条 优先考虑并发设计
  • 31.1 并发与并行
  • 31.2 Go并发设计实例
  • 第32条 了解goroutine的调度原理
  • 32.1 goroutine调度器
  • 32.2 goroutine调度模型与演进过程
  • 32.3 对goroutine调度器原理的进一步理解
  • 32.4 调度器状态的查看方法
  • 32.5 goroutine调度实例简要分析
  • 第33条 掌握Go并发模型和常见并发模式
  • 33.1 Go并发模型
  • 33.2 Go常见的并发模式
  • 第34条 了解channel的妙用
  • 34.1 无缓冲channel
  • 34.2 带缓冲channel
  • 34.3 nil channel的妙用
  • 34.4 与select结合使用的一些惯用法
  • 第35条 了解sync包的正确用法
  • 35.1 sync包还是channel
  • 35.2 使用sync包的注意事项
  • 35.3 互斥锁还是读写锁
  • 35.4 条件变量
  • 35.5 使用sync.Once实现单例模式
  • 35.6 使用sync.Pool减轻垃圾回收压力
  • 第36条 使用atomic包实现伸缩性更好的并发读取
  • 36.1 atomic包与原子操作
  • 36.2 对共享整型变量的无锁读写
  • 36.3 对共享自定义类型变量的无锁读写
  • 第七部分 错误处理
  • 第37条 了解错误处理的4种策略
  • 37.1 构造错误值
  • 37.2 透明错误处理策略
  • 37.3 “哨兵”错误处理策略
  • 37.4 错误值类型检视策略
  • 37.5 错误行为特征检视策略
  • 第38条 尽量优化反复出现的if err != nil
  • 38.1 两种观点
  • 38.2 尽量优化
  • 38.3 优化思路
  • 第39条 不要使用panic进行正常的错误处理
  • 39.1 Go的panic不是Java的checked exception
  • 39.2 panic的典型应用
  • 39.3 理解panic的输出信息
展开全部

评分及书评

4.3
12个评分
  • 用户头像
    给这本书评了
    5.0
    好书

    是好书。把细节和注意项目都写了。另外楼下有人说作者不会写书,还引用了例子。当然各人看法不一,但其引用的例子确是不对的,看了便知,故作评论

      转发
      评论
      用户头像
      给这本书评了
      4.0

      内容还是很好的。不过语言的表达还是有点像英文翻译类技术书籍了,太多的定语从句读起来是拗口。新手谨慎,需要有一定的编程经验才能读懂这本书。得到搜索 “Golang" 的第一条结果找到本书的,质量还算不错。

        转发
        评论
        用户头像
        给这本书评了
        1.0
        作者水平很好,但不会写书!!!

        作者是业界很出名的老师,水平很高,但真的不会写书。随便举几个例子吧:第四条,作者想告诉我们语言和思维中存在联系,然后花了 6 页给喷了一顿素数筛算法。我是来学算法的么 ???第十六条,作者想告诉我们导入的是路径,和包名有区别,又喷了一顿编译原理!唉😮💨…… 第二十二条,作者想要提醒我们注意 defer 可能带来的性能损失,花了两页内容给出了性能分析的代码,最后给出的结论是,几乎没有什么损失,性能相差很小…… 诸如此类的问题,特别多,读的我心累。真心不推荐这本书。如果你是新人,很容易被劝退;如果你是非常熟悉编程的人,可以挑战一下;如果你是高手,何必浪费这个时间呢……

          1
          1
        • 查看全部5条书评

        出版方

        机械工业出版社有限公司

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