Go 言語インターフェイスのコンプライアンス コンパイル型チェック
Go では、ステートメント「var x interface{}」は、interface 型の変数 x を宣言します。 {}。任意の型の値を保持できます。ただし、インターフェイス変数に値を割り当てるとき、コンパイラは、割り当てられた値の型がインターフェイスの定義に準拠しているかどうかをチェックします。
指定した例では、
var ( _ blobref.StreamingFetcher = (*CachingFetcher)(nil) _ blobref.SeekFetcher = (*CachingFetcher)(nil) _ blobref.StreamingFetcher = (*DiskCache)(nil) _ blobref.SeekFetcher = (*DiskCache)(nil) )
ステートメントCachingFetcher と DiskCache が StreamingFetcher インターフェイスと SeekFetcher インターフェイスのパブリック メソッドを実装していることを確認します。 「_ blobref.StreamingFetcher」接頭辞は、CachingFetcher タイプが StreamingFetcher インターフェイスを満たすことを示します。このチェックは、これらのインターフェイスを実装する型を予期するコードでこれらの型が正しく使用できることを確認するために重要です。
これらのステートメントの RHS 部分は、nil パラメーターを含むポインター コンストラクター構文を使用します。この場合、「(T)(nil)」は型付き nil 値を表し、nil 値を型 T の変数に割り当てる必要があることを示すために使用されます。たとえば、次のステートメントは、nil 値を持つ StreamingFetcher インターフェイスへのポインターを宣言します。
var fetcher *blobref.StreamingFetcher = (*blobref.StreamingFetcher)(nil)
この構文は、インターフェイスへのポインターを作成し、nil 値が正しく割り当てられていることを確認する便利な方法です。
以上がGo はコンパイル時の型チェックを通じてインターフェイスのコンプライアンスをどのように確保しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。