章节摘要:这一章从内存走向抽象:切片的三元组结构与扩容行为、map 的哈希桶实现与并发禁区、指针的传值边界、方法与接收者的选择、接口的隐式实现与两字 神秘结构。读完本章,你能设计出行为正确、并发安全的自定义类型,并解释"接口的 nil 为什么不是 nil"这类经典问题。
阅读完本章,你应当能够:
数据结构是"怎么摆",类型系统是"怎么信"——Go 把两件事都用"小而可预测"的方式解决。
值语义的数组、引用语义的切片、哈希实现的 map,三者层层递进,外加链表堆树等结构的手工实现要点。
取地址、解引用、指针与函数/数组/结构体/切片/map 的组合行为,以及"没有指针运算"的安全边界。
接收者的两种形态与方法集规则、接口的隐式实现、组合、断言与空接口的历史角色。
3.1 解决"数据在内存里的形状",3.2 解决"怎么间接指向这些形状",3.3 在形状之上挂行为、抽契约。切片与指针的细节会在 3.3 的方法集规则里再次现身,建议按序阅读。
┌───────────────┐ ┌───────────────┐ ┌─────────────────┐ │ 3.1 切片与map │ ─▶ │ 3.2 指针 │ ─▶ │ 3.3 方法与接口 │ │ 内存形状 │ │ 间接与传递 │ │ 行为与契约 │ └───────────────┘ └───────────────┘ └────────┬────────┘ ▼ 第4章 用包把类型组织成工程