Go / Rust 高频五星设计模式开发规范(Wiki精简版)
Go / Rust 高频五星设计模式开发规范(Wiki精简版)
一、通用设计原则
-
设计模式为工程工具,禁止强行套用,简单逻辑优先直白实现,避免过度设计。
-
Go 语言采用隐式接口 + 组合编程思想,摒弃类继承模式。
-
Rust 优先使用泛型静态分发(零成本抽象),仅动态切换多实现场景使用 Box
。 -
业务开发仅使用五星高频模式,低频模式默认禁止主动引入。
二、五星高频设计模式(核心推荐)
1. 建造者 Builder
核心能力:分步构建复杂对象,优雅处理多可选参数,支持链式配置,解决结构体参数臃肿、初始化混乱问题。
适用场景:客户端配置、数据库连接、HTTP请求体、复杂业务实体初始化、多参数组件构建。
Go 实现:结构体 + 指针接收者链式方法,标准库参考 strings.Builder。
Rust 实现:消耗型链式设计(self 所有权转移),标准库参考 std::process::Command、reqwest 客户端构建器。
建造者模式(Builder Pattern)工程规范与实现(Go / Rust 双语言)
2. 单例 Singleton
核心能力:保障全局资源唯一实例,控制昂贵资源初始化次数,节约内存与系统开销。
适用场景:全局配置、日志实例、连接池管理器、全局工具类。
约束规范:优先依赖注入,仅用于全局公共资源,禁止业务实体滥用单例。
Go 实现:基于 sync.Once 懒加载,线程安全标准方案。
Rust 实现:基于 OnceCell / LazyLock 原生实现,替代第三方 lazy_static 库。
单例模式(Singleton Pattern)工程规范与实现(Go / Rust 双语言)
3. 策略 Strategy
核心能力:封装一族可互换算法,统一抽象接口,支持运行时动态切换实现,彻底消除巨型 if/switch 分支。
适用场景:加密解密、数据解析、支付渠道、路由规则、排序算法、业务策略切换。
Go 实现:定义通用接口,多场景独立实现,业务层依赖抽象接口。
Rust 实现:常规场景用泛型静态分发,动态切换场景使用 Box
策略模式(Strategy Pattern)工程规范与实现(Go / Rust 双语言)
4. 装饰器 Decorator(语言核心模式)
核心能力:不修改原有业务代码,横向叠加通用能力,实现功能无侵入增强,符合开闭原则。
语义区分:装饰器侧重功能增强,代理侧重访问控制,业务优先使用装饰器。
适用场景:HTTP中间件、日志记录、链路追踪、超时限流、IO包装、通用切面逻辑。
Go 实现:结构体嵌入接口,嵌套包装实现多层增强,标准库参考 io.TeeReader、HTTP Handler 中间件。
Rust 实现:泛型约束封装底层实现,生态代表 tower Layer、axum 中间件、迭代器适配器。
5. 责任链 Chain of Responsibility
核心能力:请求沿预设链条逐级传递,每个处理器可独立处理、拦截或透传请求,拆分复杂校验逻辑。
适用场景:接口鉴权、参数校验、限流熔断、消息多级处理、审批流程、网关过滤。
工程组合:Web 中间件为责任链+装饰器的经典组合落地形态。
6. 状态 State
核心能力:将不同状态的行为独立封装,状态与行为绑定,消除大量状态判断分支,标准化状态流转。
适用场景:订单流转、工单审批、网络连接状态、任务生命周期管理。
优化建议:复杂多状态场景,优先使用成熟状态机库,避免手动维护流转逻辑。
7. 迭代器 Iterator
核心能力:统一各类数据结构的遍历接口,屏蔽底层存储差异(数组、树形、链表),标准化流式遍历逻辑。
适用场景:数据集批量遍历、树形结构遍历、流式数据读取、批量数据处理。
语言差异:Go 无统一迭代器标准,业务自定义迭代接口;Rust 内置 Iterator 标准 trait,生态完善、优先原生实现。
三、Go 与 Rust 模式实现差异
-
多态机制:Go 隐式接口、全程运行时分发;Rust 默认泛型静态零成本分发,动态分发按需开启。
-
建造者模式:Go 使用指针接收者链式调用;Rust 使用所有权转移的消耗型链式调用,更安全简洁。
-
装饰器模式:Go 依靠结构体嵌入组合;Rust 依靠泛型约束包装实现。
-
迭代器能力:Go 无官方标准实现;Rust 为语言原生核心能力,重度生态支撑。
四、设计模式禁用规范(防过度设计)
业务开发禁止主动使用以下低频、高复杂度模式:抽象工厂、原型、桥接、访问者、中介者、解释器、享元。仅框架、中间件底层开发可按需使用。

浙公网安备 33010602011771号