第3章 数据结构与类型系统


第3章 数据结构与类型系统

章节摘要:这一章从内存走向抽象:切片的三元组结构与扩容行为、map 的哈希桶实现与并发禁区、指针的传值边界、方法与接收者的选择、接口的隐式实现与两字 神秘结构。读完本章,你能设计出行为正确、并发安全的自定义类型,并解释"接口的 nil 为什么不是 nil"这类经典问题。

读前必看

阅读完本章,你应当能够:

  1. 画出切片头结构并预测 append 后原切片是否受影响;
  2. 解释 map 的无序性、零值不可用与并发写崩溃;
  3. 用指针接收者与值接收者做出正确选择;
  4. 用接口组合替代继承设计小型类型体系;
  5. 用类型断言与类型开关安全拆箱;
  6. 排查"接口值不等于 nil"的隐蔽 bug。

核心概念速览

数据结构是"怎么摆",类型系统是"怎么信"——Go 把两件事都用"小而可预测"的方式解决。

子章节导航

3.1 数组、切片与 map

值语义的数组、引用语义的切片、哈希实现的 map,三者层层递进,外加链表堆树等结构的手工实现要点。

3.2 指针

取地址、解引用、指针与函数/数组/结构体/切片/map 的组合行为,以及"没有指针运算"的安全边界。

3.3 方法与接口

接收者的两种形态与方法集规则、接口的隐式实现、组合、断言与空接口的历史角色。

子章节之间的逻辑关系

3.1 解决"数据在内存里的形状",3.2 解决"怎么间接指向这些形状",3.3 在形状之上挂行为、抽契约。切片与指针的细节会在 3.3 的方法集规则里再次现身,建议按序阅读。

┌───────────────┐ ┌───────────────┐ ┌─────────────────┐ │ 3.1 切片与map │ ─▶ │ 3.2 指针 │ ─▶ │ 3.3 方法与接口 │ │ 内存形状 │ │ 间接与传递 │ │ 行为与契约 │ └───────────────┘ └───────────────┘ └────────┬────────┘ ▼ 第4章 用包把类型组织成工程 ​

前置知识与后续延伸

  • 前置:第 2 章的类型、函数与控制流。
  • 为后续铺垫:接口是第 4 章错误处理(error 即接口)与第 5 章 Context 的前置;并发安全 map 的讨论会直接引出第 5 章的锁与 channel。
作者与出处
原作者:灏天文库
来源:平台策划编纂
整理人: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U