Go 表示结构之间层次关系的方法,以 Go 编译器的 AST 实现为例,围绕使用带有空方法的接口。这就提出了这个方法是否真正惯用且简单的问题。
接口实现的空方法
Go 的接口是方法签名的集合。通过向接口添加空方法,可以明确说明实现该接口的意图。这对于由于设置了兼容方法而未隐式实现接口的类型特别有用。
强制执行不同的类型区别
空方法在区分层次结构中的类型。例如,如果 Immovable 和 Movable 共享相同的方法集,则一种类型的对象可以分配给另一种类型的变量,从而违反了预期的区别。通过向每个接口添加不同的空方法,可以防止这种分配。
使用嵌入式结构减少空方法
虽然空方法可以达到其目的,但它们也可能导致导致此类方法的扩散。为了解决这个问题,可以定义自定义结构实现并将它们相互嵌入。这允许“继承”父实现的方法,从而减少对空方法的需求。
示例实现
使用示例层次结构,我们创建一个结构体实现对于每种类型:
<br>type ObjectImpl struct {}<p>func (o *ObjectImpl) object() {}</p><p>type ImmovableImpl struct {</p><pre class="brush:php;toolbar:false">ObjectImpl
}
func (o *Immovable ) immovable() {}
类型建筑结构{
ImmovableImpl
}
这里,Building 自动成为一个 Immovable 对象,因为它嵌入了 ImmovableImpl 结构。
结论
空方法的使用Go 的 AST 层次结构是一个约定问题,但它强调了显式接口实现和类型区分的需要。虽然嵌入式结构可以减少空方法的数量,但方法的选择取决于开发人员的具体要求和偏好。
以上是我们如何在 Go 中惯用地创建复杂的结构层次结构?的详细内容。更多信息请关注PHP中文网其他相关文章!