構造体の階層を設計する際、Go は型の関係を整理するための 2 つのアプローチを提供します。埋め込みと空のインターフェイスです。メソッド。
Go の「空のメソッド」アプローチでは、インターフェイスと空のメソッドを使用して型の階層を表します。空のメソッドとは、実装がまったくないメソッドです。その目的は、単にタイプがインターフェイスを満たすことをマークすることです。
提供された例では、タイプ Object、Immovable、Building、Movable、Car、および Bike が階層を形成しており、次の実装では空のインターフェイスを使用しています。
type Object interface { object() } type Immovable interface { Object immovable() } type Building struct { ... } type Mountain struct { ... } type Movable interface { Object movable() } type Car struct { ... } type Mountain struct { ... } func (*Building) object() {} func (*Mountain) object() {} func (*Car) object() {} func (*Bike) object() {} func (*Building) immovable() {} func (*Mountain) immovable() {} func (*Car) movable() {} func (*Bike) movable() {}
このメソッドは型の関係を明示的に文書化し、互換性のないものの代入を防ぎます。 type.
Go は、構造体が別の構造体のメソッドを継承できるようにする埋め込みもサポートしています。埋め込みを使用すると、階層は次のように表すことができます。
type ObjectImpl struct {} func (o *ObjectImpl) object() {} type ImmovableImpl struct { *ObjectImpl // Embed ObjectImpl struct } func (o *Immovable) immovable() {} type Building struct { *ImmovableImpl // Embed ImmovableImpl struct } type MovableImpl struct { *ObjectImpl // Embed ObjectImpl struct } func (o *Movable) movable() {} type Car struct { *MovableImpl // Embed MovableImpl struct } type Bike struct { *MovableImpl // Embed MovableImpl struct }
埋め込みは、Go の継承のようなメカニズムを利用して空のメソッドの数を減らす代替アプローチを提供します。
以上が埋め込みまたは空のインターフェイスを使用して Go で構造体の複雑な階層を慣用的に作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。