問題ステートメント
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 }
このアプローチでは、Build は明示的な空のメソッドを必要とせずに、Object および Immovable からメソッドを自動的に継承します。
空のメソッドの削減
空のメソッドは型制約の文書化と強制には便利ですが、削減することもできます。メソッドの埋め込みを使用する:
要約すると、Go で慣用的に構造体階層を作成するには、組み込みを慎重に使用する必要があります。型関係を確立し、制約を強制するためのインターフェイスとメソッドの埋め込み。
以上がGo で階層構造を慣用的に作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。