7

この Go コードのスニペットは何をしますか?

var _ interface {
    add(string) error
} = &watcher{}

私は2つのことを返すと信じてい&watcher{}ます.1つ目は破棄され、2つ目は...インターフェイスに割り当てられますか? Github のfswatchでコードを見つけました。

4

1 に答える 1

12

この構文は、型リテラルによって指定された型を持つ空白の識別子名を持つ変数を宣言します。この場合のインターフェース定義。以下はイニシャライザ式です。この場合、複合リテラルへのポインタです。

スニペットの全体的な機能は、変数がどのような方法でも実体化されず、初期化子の考えられる副作用のみが観察されるため、 a*watcherが前述のインターフェースを満たすことを静的に保証することです。_静的 (この場合のように) または動的 (たとえば、実行時にいくつかのグローバル変数に割り当てる関数の呼び出し、ハンドラーの登録など) のいずれかです。

于 2013-01-07T19:00:36.540 に答える