内容推荐 通过不断思考和整理,作者编写了这本更具系统性也更通俗易懂的Go语言入门和进阶书籍,以帮助学习者少走弯路,比其他人更快一步提升职业竞争力。 本书共包含5个部分。 第1部分:快速入门Go语言。作者挑选了变量、常量、基础数据类型、函数和方法、结构体和接口等知识点进行介绍。这部分内容相对简洁,但已经足够让你掌握Go的基本程序结构了。 第2部分:Go语言的高效并发。这部分主要介绍goroutine、channel、同步原语等知识,让你对Go语言层面的并发支持有更深入的理解,并且可以编写自己的Go语言并发程序。这个部分最后一章专门介绍常用的并发模式,可以拿来即用,以更好地控制并发。 第3部分:深入理解Go语言。这部分讲解Go语言底层原理和高级功能,比如slice的底层是怎样的、为什么这么高效等。这部分内容也是作者特意设计的,跟着作者一起研究底层原理,可避免初学者不求甚解的通病。总之,只有理解了底层原理,你才能更灵活地编写程序并高效地应对问题。 第4部分:Go语言工程管理。学习一门语言,不仅要掌握它本身的知识,还要掌握模块管理、性能优化等周边技能,因为这些技能可以帮助你更好地进行多人协作,提高开发效率,写出更高质量的代码。你可以在这部分学到如何测试Go语言代码以提高代码质量、如何做好性能优化、如何使用第三方库来提高自己项目的开发效率等。 第5部分:Go语言泛型。这是Go语言在1。18版本中新增的特性,也是大家期待已久的特性。在这一部分作者会带你学习Go语言泛型的使用,以及如何使用泛型来提高效率和简化代码。 目录 前言 学习Go语言,抓住未来的机遇 ●第一部分 快速入门Go语言 第1章 基础入门:Hello, Go语言 1.1 Hello,World 1.2 程序结构分析 1.3 搭建Go语言开发环境 1.3.1 在Windows下安装 1.3.2 在Linux下安装 1.3.3 在macOS下安装 1.3.4 安装测试 1.3.5 环境变量设置 1.4 项目结构 1.5 编译发布 1.6 跨平台编译 1.7 Go编辑器推荐 1.8 小结 第2章 数据类型:Go语言的基石 2.1 一个简单示例 2.2 基础类型 2.2.1 整型 2.2.2 浮点型 2.2.3 布尔型 2.2.4 字符串 2.2.5 零值 2.3 变量 2.3.1 变量简短声明 2.3.2 指针 2.3.3 赋值 2.4 常量 2.4.1 常量的定义 2.4.2 iota 2.5 字符串的使用 2.5.1 字符串和数字互转 2.5.2 strings包 2.6 小结 第3章 控制结构:if、for、switch那些事儿 3.1 if条件语句 3.2 switch选择语句 3.3 for循环语句 3.4 小结 第4章 集合类型:如何正确使用array、slice和map 4.1 数组 4.1.1 数组声明 4.1.2 数组循环 4.2 切片 4.2.1 基于数组生成切片 4.2.2 切片的修改 4.2.3 切片的声明 4.2.4 append函数 4.2.5 切片元素循环 4.3 映射 4.3.1 创建和初始化map 4.3.2 获取和删除map 4.3.3 遍历map 4.3.4 获取map的大小 4.4 string和[]byte 4.5 小结 第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 小结 第6章 struct和interface:隐式的接口实现 6.1 结构体 6.1.1 结构体的定义 6.1.2 声明和使用 6.1.3 结构体的字段 6.2 接口 6.2.1 接口的定义 6.2.2 接口的实现 6.2.3 值和指针类型接收者 6.3 工厂函数 6.4 继承和组合 6.5 类型断言 6.6 小结 第7章 错误处理:如何更优雅地处理程序异常和错误 7.1 错误 7.1.1 error接口 7.1.2 error工厂函数 7.1.3 自定义error 7.1.4 error断言 7.2 错误嵌套 7.2.1 Error Wrapping功能 7.2.2 errors.Unwrap函数 7.2.3 errors.Is函数 7.2.4 errors.As函数 7.3 defer函数 7.4 panic函数 7.5 recover函数 7.6 小结 ●第二部分 Go语言的高效并发 第8章 goroutine和channel:并发的基础 8.1 什么是并发 8.2 进程和线程 8.2.1 进程 8.2.2 线程 8.3 协程 8.4 管道 8.4.1 声明一个管道 8.4.2 无缓冲管道 8.4.3 有缓冲管道 8.4.4 关闭管道 8.4.5 单向管道 8.5 select+channel示例 8.6 小结 第9章 同步原语:让你对并发控制得心应手 9.1 资源竞争 9.2 同步原语 9.2.1 sync.Mutex 9.2.2 sync.RWMutex 9.2.3 sync.WaitGroup 9.2.4 sync.Once 9.2.5 sync.Cond 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.4.1 map 14.4.2 chan 14.5 类型的零值 14.6 小结 第15章 内存分配:new和make该如何选择 15.1 变量 15.1.1 变量的声明 15.1.2 变量的赋值 15.2 new函数 15.3 变量初始化 15.3.1 指针变量初始化 15.3.2 make 函数 15.4 小结 第16章 运行时反射:字符串和结构体之间如何转换 16.1 什么是反射 16.2 获取对象的值和类型 16.3 ref lect.Value 16.3.1 结构体定义 16.3.2 获取原始类型 16.3.3 修改对应的值 16.3.4 获取对应的底层类型 16.4 ref lect.Type 16.4.1 接口定义 16.4.2 遍历结构体的字段和方法 16.4.3 是否实现某接口 16.5 字符串和结构体的互转 16.5.1 JSON和struct互转 16.5.2 struct tag功能 16.5.3 struct转JSON的示例 16.6 反射定律 16.7 小结 第17章 非类型安全:不安全但高效的unsafe 17.1 指针类型转换 17.2 unsafe.Pointer 17.3 uintptr 指针类型 17.4 |