Go での抽象クラスの実装
Go は安全性とシンプルさを重視しているため、抽象クラスをネイティブにサポートしていません。ただし、抽象的な動作をシミュレートするための回避策はあります。
元の質問
この質問では、Go のインターフェイス内でデフォルトの実装ができないことについて説明しています。 Go のインターフェイスにはフィールドを含めることができないため、デフォルトの動作でステートレス オブジェクトを実装するのは困難です。
抽象デーモンを使用した回避策
提供されるソリューションは、次のサービスを提供する抽象デーモンを採用しています。インターフェイスと具象実装の間の仲介者として。
type AbstractDaemon struct { Daemon }
抽象デーモンは次のメッセージを受け取ります。 Daemon フィールドを介してインターフェイス構造を取得します。これにより、デフォルトの動作を抽象デーモンで定義できるようになります。
func (a *AbstractDaemon) start(duration time.Duration) { // Default implementation for start }
具体的な実装
具体的な実装には、抽象デーモンが埋め込まれ、独自の doWork メソッドが定義されます。
type ConcreteDaemonA struct { *AbstractDaemon foo int } func (a *ConcreteDaemonA) doWork() { // Custom implementation for ConcreteDaemonA }
インスタンス化と使用法
具体的な実装はインスタンス化され、インターフェイス タイプとして使用できます。
var dA Daemon = newConcreteDaemonA() dA.start(1 * time.Second)
評価
この回避策は、次の方法を提供します。 Go で抽象クラスを実装するには、デフォルトの動作をインターフェイスから切り離し、別の抽象構造で定義します。これは、言語の制限にもかかわらず、抽象的な動作を実現するために Go で一般的に使用されるアプローチです。
以上が抽象クラスの動作を Go でシミュレートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。