toc:Go

toc:Go

设计 #

Go语言的设计哲学 #

Go语言的组合设计哲学 #

垂直组合与水平组合 #

Go语言提供的正交性 #

接受接口返回结构体 #

包装器模式 #

适配器函数类型(http.HandlerFunc) #

中间件应用模式 #

什么是 type set #

版本 #

Go语言的版本发布策略 #

retract指示符 #

升级module的major版本号 #

变量 #

控制结构 #

类型 #

常量 #

数值类型 #

string #

数组和切片 #

切片的内部结构

数组的切片化 指根据已经存在的数组来创建切片。

切片与map与零值可用,切片的零值可用,而map结构的零值不可用。

Full Slice Expression 可用于强制切片的扩容。

map #

struct #

嵌入字段的用法 #

实现继承的原理 #

interface #

空接口类型 #

动静兼备 #

接口的内部结构 #

eface结构 用于表示没有方法的空接口。 iface结构 用于表示非空的拥有方法的接口。 iface与eface 比较了两个结构的差别。 iface与eface结构不同,但在比较时,go却会做特殊的处理。具体的例子参考: 空接口类型变量与非空接口类型变量的等值比较 Go语言中将某类型变量赋值给接口变量的过程称为“装箱” ,具体原理参考: 接口类型的装箱(boxing)原理 装箱后的数据与原变量的值再无瓜葛 nil error 值 != nil 来自 Go FAQ的问题。

接口完整性检查 #

函数 #

显式转换为HandlerFunc类型 #

方法表达式(Method Expression) #

defer的运作机制 #

defer表达式的执行次序 #

具名返回值 #

T类型与*T类型方法集合的差别 #

方法集合决定接口实现 #

结构体中嵌入结构体后的方法集合 #

defined类型继承的方法集合 #

alias类型继承的方法集合 #

error #

并发 #

chan #

chan数据结构 为什么不能用len来判满或判空 用nil channel解决关闭的channel输出0的问题 用通道来等待主goroutine chan导致的goroutine泄漏 使用反射操作Channel 击鼓传花

Mutex #

Mutex的架构演进 “谁申请,谁释放”的原则 Mutex不是可重入的锁 实现读写锁的三种方案

Cond #

条件变量的Wait方法主要做了哪四件事情 使用 Cond 的 2 个常见错误

sync.Pool #

sync.Pool使用注意点 sync.Pool的数据结构

Context #

Context链式查找 WithCancel WithDeadline返回的cancel的正确用法 Context知识结构

原子性 #

不同架构的原子操作指令是不同的 使用atomic和直接内存操作的区别 使用atomic实现Lock-Free queue

Module #

init函数 #

三个行为特征 重置包级变量值 实现对包级变量的复杂初始化 实现“注册模式”

内存管理 #

TCMalloc的分配思想 #

mspan内存管理单元 #

Go虚拟内存布局 #

68个spanClass #

spanClass中的noscan属性 #

mcache的结构 #

mcentral结构 #

mheap结构 #

三级内存管理器结构图 #

逃逸分析 #

内存管理的三个参与者 #

内存的四级分配结构 #

垃圾回收 #

语义垃圾(Semantic Garbage) #

三色不变性 #

性能提示 #

toc:Go:Cookbook #

https://github.com/avelino/awesome-go #

Go 语言设计与实现 #

https://draveness.me/golang/

https://github.com/go101/go101 #