求剧情
《Go语言学习笔记》封面

Go语言学习笔记

雨痕 著共 17 节

《Go语言学习笔记》(雨痕)的分节剧情梳理,每节一篇精简梗概。

共 17 章 · 已全部整理

章节目录

一章一页,已整理的按顺序列在这里。

第一节作者回顾了《Go学习笔记》的成书过程:因喜爱C而较早关注Go,边学边记形成初稿,发布后反响平淡便默默更新;后受编辑询问和GopherChina大会鼓励,重新撰写书稿……阅读第二节本节先快速预览Go语言的主要功能:源码用UTF-8编码,文件以.go为扩展名,通过package声明所属包,入口函数main须放在main包中;用import导入包……阅读第三节本节先阐述作者推崇简洁语言设计的观点,指出算法即解决问题的过程,运算符与表达式是最基础的算法。阅读第四节本节讲解 Go 函数的参数与返回值机制,以及匿名函数、闭包、defer 和错误处理。阅读第五节本节介绍Go语言中字符串、数组、切片、字典和结构体的特性与性能要点。阅读第六节结构体字段全部类型支持时才能比较;可用指针直接访问字段,但不能多级指针。阅读第七节本节首先说明接口判空的条件,以及类型推断的几种用法。随后区分并发与并行:并发允许多任务交错执行,并行依赖多核真正同时执行,协程、多线程、多进程各有适用场景……阅读第八节本节先讲标准库sync中Mutex、RWMutex的使用要点:作为匿名字段时方法须用指针接收者,否则复制会使锁失效;锁粒度应尽量小、及早释放;不支持递归锁……阅读第九节本节先讲反射:可用reflect直接构造基础复合类型,Type用于获取类型信息并遍历结构体字段、提取structtag、判断接口实现,Value用于读写实例数据……阅读第十节本节介绍Go开发环境的搭建与编译工具的使用。可下载官方开发包,也可自行编译:因Go1.5已用Go语言编写Go编译器(自举),建议先装C版1.4配合gcc完成后续版本编译……阅读第十一节本节介绍Go语言内存分配器的结构与工作流程。分配器管理的内存分为span(内部管理)和object(面向分配)两种。阅读第十二节垃圾回收以span为单位进行。清理函数sweepone触发mSpan_Sweep,遍历span,把不可达对象并入freelist;若span全部收回则归还heap。阅读第十三节本节先讨论垃圾回收的隐性泄漏问题:服务重启时大量分配对象会把触发阈值next_gc推得很高,之后活跃对象远少于该阈值,导致GC长期不触发、白色对象滞留。阅读第十四节本节讲解Go运行时中M(系统线程)的创建、调度与栈管理。阅读第十五节本节先讲连续栈的扩容与回收:编译器在函数头部插入指令,比较SP与stackguard0判断是否溢出,必要时分配两倍大小的新栈并拷贝数据替换旧栈;回收的栈放回复用链表……阅读第十六节本节分析了Go运行时中channel、select、defer、panic/recover和finalizer的实现原理。阅读第十七节由于 goroutine 对线程的抽象,以往基于线程本地存储的方案无法实施,官方因此提供 sync.Pool,其算法已被内存分配、GC 和调度器采用。阅读

全部 17 章

蓝色可点开阅读,灰色的还在整理中。