8

camlistore ( http://code.google.com/p/camlistore/source/browse/pkg/cacher/cacher.go ) から次のステートメントが表示されます。

var (
        _ blobref.StreamingFetcher = (*CachingFetcher)(nil)
        _ blobref.SeekFetcher      = (*CachingFetcher)(nil)
        _ blobref.StreamingFetcher = (*DiskCache)(nil)
        _ blobref.SeekFetcher      = (*DiskCache)(nil)
)

変数は作成されず、ステートメントは、CachingFether が StreamingFetcher と SeekFetcher のパブリック関数を実装することをコンパイラが確実にチェックすることを理解しています。RHS 部分は、nil パラメーターを指定したポインター コンストラクター構文を使用します。この構文は Go 言語で何を意味しますか?

4

1 に答える 1

13

(*T)(nil)変換です。この場合、型指定された nil を表します。たとえば、同じ値

var p *T

何かを割り当てる前に持っています。

変換の標準的な構文は ですT(expr)が、 の優先順位により、*誤ってバインドされます。

*T(expr)

この構文は、関数の戻り値Tを 1 つの引数で逆参照することを意味しますexpr。そのため、変換には別の構文があります。

(T)(expr)

もちろん、どこにいるTことができます*U。したがって

(*U)(expr)

Camlistore リポジトリに表示されるものの一般化された形式です。

于 2013-08-01T12:50:49.650 に答える