作品简介

通过不断思考和整理,作者编写了这本更具系统性也更通俗易懂的Go语言入门和进阶书籍,以帮助学习者少走弯路,比其他人更快一步提升职业竞争力。本书共包含五个部分。

第一部分:快速入门Go语言。作者挑选了变量、常量、基础数据类型、函数和方法、结构体和接口等知识点进行介绍。这部分内容相对简洁,但已经足够让你掌握Go的基本程序结构了。

第二部分:Go语言的高效并发。这部分主要介绍goroutine、channel、同步原语等知识,让你对Go语言层面的并发支持有更深入的理解,并且可以编写自己的Go语言并发程序。这个部分最后一章专门介绍常用的并发模式,可以拿来即用,以更好地控制并发。

第三部分:深入理解Go语言。这部分讲解Go语言底层原理和高级功能,比如slice的底层是怎样的、为什么这么高效等。这部分内容也是作者特意设计的,跟着作者一起研究底层原理,可避免初学者不求甚解的通病。总之,只有理解了底层原理,你才能更灵活地编写程序并高效地应对问题。

第四部分:Go语言工程管理。学习一门语言,不仅要掌握它本身的知识,还要掌握模块管理、性能优化等周边技能,因为这些技能可以帮助你更好地进行多人协作,提高开发效率,写出更高质量的代码。你可以在这部分学到如何测试Go语言代码以提高代码质量、如何做好性能优化、如何使用第三方库来提高自己项目的开发效率等。

第五部分:Go语言泛型。这是Go语言在1.18版本中新增的特性,也是大家期待已久的特性。在这一部分作者会带你学习Go语言泛型的使用,以及如何使用泛型来提高效率和简化代码。

飞雪无情,Go语言早期的布道者、“Go语言实战笔记”作者,通过“飞雪无情”公众号与数万名读者交流Go语言技术,擅长用通俗的语言将底层机制讲得浅显易懂。深耕技术领域近十年,前随手记技术VP、Go Meetup讲师、TGO鲲鹏会成员,目前在一家互联网公司担任副总裁,负责产品的研发管理和架构设计。

作品目录

  • 前言 学习Go语言,抓住未来的机遇
  • 第一部分 快速入门Go语言
  • 第1章 基础入门:Hello,Go语言
  • 1.1 Hello,World
  • 1.2 程序结构分析
  • 1.3 搭建Go语言开发环境
  • 1.4 项目结构
  • 1.5 编译发布
  • 1.6 跨平台编译
  • 1.7 Go编辑器推荐
  • 1.8 小结
  • 第2章 数据类型:Go语言的基石
  • 2.1 一个简单示例
  • 2.2 基础类型
  • 2.3 变量
  • 2.4 常量
  • 2.5 字符串的使用
  • 2.6 小结
  • 第3章 控制结构:if、for、switch那些事儿
  • 3.1 if条件语句
  • 3.2 switch选择语句
  • 3.3 for循环语句
  • 3.4 小结
  • 第4章 集合类型:如何正确使用array、slice和map
  • 4.1 数组
  • 4.2 切片
  • 4.3 映射
  • 4.4 string和[]byte
  • 4.5 小结
  • 第5章 函数和方法:如何区分函数和方法
  • 5.1 函数
  • 5.2 方法
  • 5.3 小结
  • 第6章 struct和interface:隐式的接口实现
  • 6.1 结构体
  • 6.2 接口
  • 6.3 工厂函数
  • 6.4 继承和组合
  • 6.5 类型断言
  • 6.6 小结
  • 第7章 错误处理:如何更优雅地处理程序异常和错误
  • 7.1 错误
  • 7.2 错误嵌套
  • 7.3 defer函数
  • 7.4 panic函数
  • 7.5 recover函数
  • 7.6 小结
  • 第二部分 Go语言的高效并发
  • 第8章 goroutine和channel:并发的基础
  • 8.1 什么是并发
  • 8.2 进程和线程
  • 8.3 协程
  • 8.4 管道
  • 8.5 select+channel示例
  • 8.6 小结
  • 第9章 同步原语:让你对并发控制得心应手
  • 9.1 资源竞争
  • 9.2 同步原语
  • 9.3 小结
  • 第10章 Context:多协程并发控制神器
  • 10.1 协程如何退出
  • 10.2 Context的使用示例
  • 10.3 Context详解
  • 10.4 Context树
  • 10.5 使用Context取消多个协程
  • 10.6 Context传值
  • 10.7 Context使用原则
  • 10.8 小结
  • 第11章 并发模式:拿来即用的经验总结
  • 11.1 for select循环模式
  • 11.2 select timeout模式
  • 11.3 流水线模式
  • 11.4 扇出和扇入模式
  • 11.5 Future模式
  • 11.6 小结
  • 第12章 并发技巧:高效并发安全的字节池
  • 12.1 字节切片
  • 12.2 高效字节池
  • 12.3 使用BytePoolCap
  • 12.4 BytePoolCap与sync.Pool的对比
  • 12.5 小结
  • 第三部分 深入理解Go语言
  • 第13章 指针详解:什么情况下应该使用指针
  • 13.1 什么是指针
  • 13.2 指针的声明和定义
  • 13.3 指针的操作
  • 13.4 指针参数
  • 13.5 指针接收者
  • 13.6 什么情况下使用指针
  • 13.7 小结
  • 第14章 参数传递:值、引用以及指针的区别
  • 14.1 修改参数
  • 14.2 值类型
  • 14.3 指针类型
  • 14.4 引用类型
  • 14.5 类型的零值
  • 14.6 小结
  • 第15章 内存分配:new和make该如何选择
  • 15.1 变量
  • 15.2 new函数
  • 15.3 变量初始化
  • 15.4 小结
  • 第16章 运行时反射:字符串和结构体之间如何转换
  • 16.1 什么是反射
  • 16.2 获取对象的值和类型
  • 16.3 ref lect.Value
  • 16.4 ref lect.Type
  • 16.5 字符串和结构体的互转
  • 16.6 反射定律
  • 16.7 小结
  • 第17章 非类型安全:不安全但高效的unsafe
  • 17.1 指针类型转换
  • 17.2 unsafe.Pointer
  • 17.3 uintptr指针类型
  • 17.4 指针转换规则
  • 17.5 unsafe.Sizeof
  • 17.6 小结
  • 第18章 零拷贝:slice为何如此高效
  • 18.1 数组
  • 18.2 slice
  • 18.3 小结
  • 第19章 实战:字符串如何高效拼接
  • 19.1 一个例子
  • 19.2 几种拼接方式
  • 19.3 性能对比
  • 19.4 拼接函数改造
  • 19.5 再次进行性能测试
  • 19.6 builder拼接慢在哪里
  • 19.7 内存分配优化
  • 19.8 小结
  • 第四部分 Go语言工程管理
  • 第20章 测试:质量保证的基石
  • 20.1 单元测试
  • 20.2 基准测试
  • 20.3 小结
  • 第21章 性能优化:如何写出高质量的代码
  • 21.1 代码规范检查
  • 21.2 性能优化
  • 21.3 小结
  • 第22章 协作开发:模块化管理
  • 22.1 Go语言中的包
  • 22.2 Go语言中的模块
  • 22.3 小结
  • 第五部分 Go语言泛型
  • 第23章 初识泛型:使用泛型简化编程
  • 23.1 一个非泛型示例
  • 23.2 使用泛型重构示例
  • 23.3 类型推导
  • 23.4 自定义类型约束
  • 23.5 内置的类型约束
  • 23.6 函数式编程
  • 23.7 小结
  • 第24章 深入泛型:漫谈泛型设计
  • 24.1 为什么需要泛型
  • 24.2 类型参数
  • 24.3 泛型类型
  • 24.4 类型约束
  • 24.5 再论类型推导
  • 24.6 小结
  • 结束语 你的Go语言成长之路
展开全部