2015-06-08 72 views
2
package main 

type Writeable interface { 
    OnWrite() interface{} 
} 

type Result struct { 
    Message string 
} 

func (r *Result) OnWrite() interface{} { 
    return r.Message 
} 

// what does this line mean? what is the purpose? 
var _ Writeable = (*Result)(nil) 


func main() { 

} 

代碼片段中的註釋表達了我的困惑。 據我所知,帶註釋的行通知編譯器檢查結構是否實現了接口,但我不太確定。有人可以幫助解釋目的嗎?無法理解一段golang代碼

+2

[這是什麼變量聲明與下劃線,內聯接口和賦值?](http://stackoverflow.com/questions/14202181/what-is-this-variable-declaration-with-underscore-inline-接口和 - assignme) – Volker

回答

8

正如您所說,這是一種驗證Result實施Writeable的方法。從GO FAQ

你可以要求編譯器檢查類型T實現了 接口I通過嘗試分配:

type T struct{} 
var _ I = T{} // Verify that T implements I. 

空白標識符_代表變量名,其在這裏不需要(從而防止「聲明但未使用」的錯誤)。

(*Result)(nil)創建了由convertingnil*Result一個未初始化的指針Result類型的值。這樣可以避免爲空結構分配內存,就像使用new(Result)&Result{}一樣。