Go コンパイラーの AST 実装によって例示される、構造体間の階層関係を表す Go のアプローチ、空のメソッドを持つインターフェイスの使用を中心に展開します。これにより、このメソッドが本当に慣用的で単純なものであるかどうかという疑問が生じます。
インターフェイス実装のための空のメソッド
Go のインターフェイスはメソッド シグネチャのセットです。空のメソッドをインターフェイスに追加することにより、そのインターフェイスを実装する意図が明示的に示されます。これは、互換性のあるメソッド セットがあるためにインターフェイスを暗黙的に実装しない型の場合に特に役立ちます。
個別の型の区別の強制
空のメソッドは、階層内のタイプを区別します。たとえば、Immovable と Movable が同じメソッド セットを共有する場合、一方の型のオブジェクトが他方の型の変数に割り当てられる可能性があり、意図した区別に違反します。各インターフェイスに個別の空のメソッドを追加することで、この割り当ては防止されます。
埋め込み構造体による空のメソッドの削減
空のメソッドは目的を果たすことができますが、次のことを行う可能性もあります。そのような方法の急増に。これに対処するために、カスタム構造体の実装を定義し、相互に埋め込むことができます。これにより、親実装のメソッドを「継承」できるようになり、空のメソッドの必要性が減ります。
実装例
階層例を使用して、構造体の実装を作成します。各型:
<br>type ObjectImpl struct {}</p> <p>func (o *ObjectImpl) object() {}</p> <p>type ImmovableImpl struct {</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">ObjectImpl
}
func (o *Immovable ) immovable() {}
type 構造体の構築{
ImmovableImpl
}
ここで、Building は ImmovableImpl 構造体を埋め込むため、自動的に Immovable オブジェクトになります。
結論
での空のメソッドの使用Go の AST 階層は慣例の問題ですが、明示的なインターフェイス実装と型の区別の必要性を強調するのに役立ちます。埋め込み構造体は空のメソッドの数を減らすことができますが、アプローチの選択は開発者の特定の要件と好みによって異なります。
以上がGo で複雑な構造階層を慣用的に作成するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。