问题陈述
在 Go 中创建结构体的层次结构可能具有挑战性,因为其缺乏显式继承。 Go 编译器的 AST 实现使用空方法来表示接口,这引发了对其惯用性质和潜在复杂性的质疑。
惯用解决方案
尽管 Go 不支持传统继承,它具有表示层次结构的替代结构:
type Object interface { object() } type ObjectImpl struct {} func (o *ObjectImpl) object() {} type Immovable interface { Object immovable() } type ImmovableImpl struct { ObjectImpl // Embed ObjectImpl } func (o *Immovable) immovable() {} type Building struct { ImmovableImpl // Embed ImmovableImpl // Building-specific fields }
在这种方法中,Building 会自动继承 Object 和 Immovable 的方法,而不需要显式的空方法。
减少空方法
虽然空方法对于记录和强制执行类型约束很有用,但可以通过使用方法来减少它们嵌入:
总之,Go 中惯用的结构层次结构创建涉及仔细使用嵌入式接口和方法嵌入以建立类型关系并强制执行约束。
以上是如何在 Go 中惯用地创建层次结构?的详细内容。更多信息请关注PHP中文网其他相关文章!