変数代入における空の識別子の目的
次のような変数代入に遭遇したとき、なぜ空の識別子が使用されるのか疑問に思うかもしれません。
var _ PropertyLoadSaver = (*Doubler)(nil)
この空白の識別子は、実行時に重要な目的を果たします。コンパイル時のアサーション。特定の型がインターフェイスの要件を満たしていることを確認します。
この例では、*Doubler 型が PropertyLoadSaver インターフェイスに対してチェックされます。 *Doubler がインターフェイスで定義されている必要なメソッドをすべて実装していない場合、コンパイルは失敗し、*Doubler に特定のメソッドが欠落していることを示すエラーが表示されます。
コードは、PropertyLoadSaver 型の変数に型なしの nil 値を割り当てます。 (*Doubler)(nil) を使用します。この割り当ては、*Doubler が PropertyLoadSaver インターフェイスを実装している場合にのみ有効です。そうでない場合は、次のようなエラー メッセージが表示されてコンパイルが終了します。
prog.go:21: cannot use (*Doubler)(nil) (type *Doubler) as type PropertyLoadSaver in assignment: *Doubler does not implement PropertyLoadSaver (missing Save method)
パッケージ内の他の場所で変数を参照する必要がないため、空白の識別子 _ が使用されます。空白以外の識別子を使用する別のアプローチも可能です:
var assertStarDoublerIsPropertyLoadSaver PropertyLoadSaver = (*Doubler)(nil)
以上がGo のコンパイル時インターフェイス アサーションで空白の識別子を使用する理由の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。