Appearance
Go 与 Rust 如何用组合表达复用
修订于 2026-10-12。这里比较语言机制,不把任何一种机制描述为“解决了所有继承问题”。
Go 没有典型的基于类的子类继承。它可以通过结构体嵌入复用实现,通过接口描述行为。嵌入会提升部分方法的可访问性,却不等同于“子类是父类”的继承关系。Go 接口是结构化满足:类型具有所需方法即可用于相应接口。
Rust 可把字段组合进结构体,并用 trait 定义共享行为。trait 的默认方法能复用一部分实现,但 trait、类型参数、动态分发和所有权规则都有各自取舍。不要把 trait 简化成“Rust 版父类”。
设计时怎么选
先用具体数据结构表达领域对象;只有在调用方确实需要替换实现时,才抽象行为接口。优先保持小接口、清楚的依赖关系,避免为了模拟传统继承树而引入层层包装。组合减少了某些继承层级问题,但转发代码、动态分发和对象所有权仍需要设计。