コードをより柔軟かつスケーラブルにするために、多くの場合、開発にインターフェイスを使用する必要があります。 Go 言語のインターフェイスは、同じインターフェイスを実装するための複数の構造をサポートする非常に強力な言語機能です。
ただし、以前は Go 言語はインターフェイスのデフォルト実装をサポートしていませんでした。つまり、インターフェイスを実装する際には、インターフェイスのすべてのメソッドを実装する必要がありました。インターフェイスを継承する必要がある場合、同じメソッドをサブインターフェイスに何度も実装する必要があります。その結果、コードの重複が多くなり、コードの拡張やメンテナンスには役立ちません。
この問題を解決するために、Go 言語バージョン 1.8 以降では、インターフェイスのデフォルト実装のサポートが提供されます。この機能を使用すると、インターフェイス内のメソッドのデフォルト実装を定義できるため、インターフェイスの実装時に必要なメソッドのみを実装する必要があります。
インターフェースのデフォルト実装の構文
インターフェースのデフォルト実装の構文は非常に単純で、メソッド実装の前にdefaultキーワードを追加するだけです。例:
type Reader インターフェイス {
Read(p []byte) (n int, err error) default Close() error { return nil }
}
この例では、Reader インターフェイスは Read メソッドと Close メソッドのデフォルト実装を定義します。 Reader インターフェイスが実装されていても Close メソッドが実装されていない場合、システムはデフォルトの Close メソッドを使用します。
インターフェイスでデフォルトの実装メソッドが定義されている場合、インターフェイスの実装時にデフォルト以外のメソッドを実装するだけでよいことに注意してください。デフォルトの実装メソッドをオーバーライドする場合は、インターフェイスを実装する構造内で同じ名前のメソッドを定義して、デフォルトの実装を置き換えることができます。
インターフェイスのデフォルト実装のアプリケーション シナリオ
インターフェイスのデフォルト実装の使用シナリオは非常に幅広いため、以下にいくつかの一般的なアプリケーション シナリオを紹介します。
Go 言語では、インターフェイスのネストは非常に一般的なテクノロジです。ネストされたインターフェイスにより、コードがより柔軟になり、より適切に整理されます。
ファイルの読み取りと書き込みを行う必要があるインターフェイスがあるとします。
type FileReadWrite インターフェイス {
Read(p []byte) (n int, err error) Write(p []byte) (n int, err error)
}
次に、必要なインターフェイスを定義します。ファイルを閉じるには :
type Closeable インターフェイス {
Close() error
}
ファイル メソッドの読み取り、書き込み、閉じるなどのファイル操作インターフェイスを定義したい場合は、次のようにします。ネストされたインターフェイスを使用します。 メソッド:
type FileOperation インターフェイス {
FileReadWrite Closeable
}
デフォルトの実装を使用すると、FileOperation インターフェイスの実装時に Close メソッドを繰り返し実装することを回避できます。
開発プロセスでは、インターフェースのバージョンのアップグレードが頻繁に発生します。インターフェイスにメソッドを追加する必要がある場合、元のインターフェイスを直接変更すると、そのインターフェイスを実装したすべてのコードを変更する必要があります。
デフォルトの実装を使用すると、既存のコードを壊さずに新しいメソッドをインターフェイスに追加できます。新しいメソッドを使用する必要がある場合は、インターフェイスを実装する構造内のデフォルトの実装メソッドをオーバーライドできます。
アダプター パターンは、クラスのインターフェイスを別のインターフェイスに変換して、このクラスのクラス間のサポートされていない相互作用を容易にするために使用される一般的な設計パターンです。インターフェース。
Go 言語では、インターフェイスのデフォルト実装を使用してアダプター パターンを迅速に実装できます。簡単な例を次に示します。
type USB インターフェース {
Connect() DataTransfer(data string) string
}
type Adaptee struct {}
func (a *Adaptee) OldInterface( ) {
fmt.Println("support old interface")
}
type アダプタ インターフェイス {
USB
}
type AdaptorImpl struct {
Adaptee
}
func (*AdapterImpl) Connect() {
fmt.Println("connect USB")
}
func (*AdapterImpl) DataTransfer(データ文字列) string {
fmt.Println("transfer data through USB") a.OldInterface() return "Result"
}
この例では、アダプターの使用法を示すために、USB インターフェースと古いインターフェース Adaptee を定義します。 Adapte が USB インターフェースを使用できるようにするために、Adapter インターフェースを実装するアダプターを定義します。
アダプターの Connect と DataTransfer はデフォルトの実装を使用します。デフォルトの実装では、Adaptee の OldInterface メソッドが呼び出されます。このように、アダプタを使用して、USB インターフェイスをサポートしていないクラスを USB インターフェイスをサポートするクラスに変換できます。
概要
Go 言語のインターフェイスのデフォルト実装は、非常に実用的な言語機能です。これにより、コードの重複を減らし、コードの品質を向上させながら、インターフェイスをより柔軟に定義できるようになります。インターフェイスのデフォルト実装を使用することで、再利用やアダプター パターンなどの設計パターンをより簡単に実装できます。
以上がgolang インターフェースのデフォルト実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。