第4章 包、模块与错误处理


第4章 包、模块与错误处理

章节摘要:代码写到几千行就必须回答三个问题:怎么分包分目录、怎么管依赖、怎么处理失败。本章讲 Go 的答案——package 与大小写可见性、init 函数的执行顺序、go.mod 与 go.sum 构成的模块体系、replace 与 vendor 的本地化手段,以及以 error 接口为核心的显式错误处理:包装、解包、自定义错误类型。最后落到项目结构的推荐布局。

阅读收获

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

  1. 用可见性规则与 init 机制设计包的边界;
  2. 管理 go.mod 依赖并用 go.sum 理解完整性校验;
  3. 用 fmt.Errorf 的百分号 w 包装错误,用 errors 的 Is 与 As 解包;
  4. 定义携带结构化信息的自定义错误类型;
  5. 按推荐布局组织一个中型 Go 项目。

核心概念速览

工程化的本质是控制依赖方向与失败路径——包管前者,error 管后者。

子章节导航

4.1 包与模块

从 package 声明到 go mod 全流程:可见性、init 顺序、别名导入、空白标识符、版本选择、replace 与 vendor。

4.2 错误处理

error 接口、if err 检查模式、%w 包装链、errors.Is 与 errors.As、自定义错误类型、panic 与 error 的分界。

4.3 代码组织与项目结构

目录布局的演进与推荐形态、包设计原则、依赖与 vendor、测试目录策略。

子章节之间的逻辑关系

4.1 先解决"代码放哪、谁可见",4.2 解决"跨包传递失败",4.3 把两者合成为可长期演进的项目骨架——结构是容器,错误处理是血管。

┌──────────────┐ ┌──────────────┐ ┌──────────────────┐ │ 4.1 包与模块 │ ─▶ │ 4.2 错误处理 │ ─▶ │ 4.3 项目结构 │ │ 边界与依赖 │ │ 包装与解包 │ │ 布局与演进 │ └──────────────┘ └──────────────┘ └────────┬─────────┘ ▼ 第5章 在工程骨架里写并发 ​

前置知识与后续延伸

  • 前置:第 1 章的 go mod init 经验、第 3 章的接口概念(error 就是接口)。
  • 为后续铺垫:Context 传播与错误包装同构;测试章节的 mock 依赖包边界清晰度。

本章学习建议

工程化章节建议边学边重构:把你前面章节练习时写的小程序,按本章推荐的目录布局拆成几个包,并用 errors.Is/As 改造成显式错误处理。动手完成一次"单文件 → 多包"的拆分,比任何理论都更能让你理解包可见性、init 顺序与依赖管理为什么这样设计。

作者与出处
原作者:灏天文库
来源:平台策划编纂
整理人: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U