2016-07-03 4 views

答えて

8

*DoublerタイプがPropertyLoadSaverインターフェイスを満たすコンパイルアサーションです。

*Doublerタイプがインタフェースをsatisifyていない場合は、コンパイルのようなエラーで終了します:それはどのように動作するか

prog.go:21: cannot use (*Doubler)(nil) (type *Doubler) as type PropertyLoadSaver in assignment: 
*Doubler does not implement PropertyLoadSaver (missing Save method) 

がここにあります。コードvar _ PropertyLoadSaverは、タイプがPropertyLoadSaverの名前のない変数を宣言します。式(*Doubler)(nil)は、タイプ*Doublerの値に評価されます。 *Doublerは、がPropertyLoadSaverインターフェイスを実装する場合にのみタイプProperytLoadSaverの変数に割り当てることができます。

ブランクの識別子_が使用されます。これは、変数をパッケージの別の場所で参照する必要がないためです。

var assertStarDoublerIsPropertyLoadSaver PropertyLoadSaver = (*Doubler)(nil) 
+0

仕様を参照することはできますか? https://golang.org/ref/spec –

+0

@Theuserwithnohatそれは仕様に含まれていません。それは非公式の大会です。 – Endophage

+1

@Karrot Kake今、私はそれがどのように機能するのか理解しています。それは一種のトリックです。空白の識別子が何らかの形で使われていないので、私はそれがゴミを生産しないと思います。オフトピック: ''(* Doubler)(nil) ''は素晴らしいです。私もこれに慣れていませんでした。 –

関連する問題