2016-08-18 83 views
1

試圖瞭解interface的空白功能。空白做什麼界面?

type Manager interface { 
    GetAge(name string) (int, error) 
} 

type manager struct { 
} 

var _ Manager = &manager{} 

func NewManager() Manager { 
    return &manager{} 
} 
+1

可能的重複http://stackoverflow.com/questions/38167403/specs-whats-the-purpose-of-the-blank-identifier-in-variable-assignment –

回答

2

這是一個特殊的習慣用於在編譯時斷言具體類型是否實現給定的接口。

在上面的代碼中,如果編寫manager類型的人忘記爲其實現GetAge方法,那麼代碼將不會編譯,編譯錯誤將準確告訴他們缺少哪些方法。

這裏可能顯得有點多餘,但如果需要通過類型實現的接口具有大量方法,則此技術可能會有所幫助。

請注意,由於上述原因,上面的代碼不會編譯。此外,您需要確保在空白聲明中使用&manager{},它的*manager(指向manager)實現Manager接口,而不是簡單地manager