Go語言將接口類型作爲特徵,類似於C風格的接口。但是,Go的界面類型似乎並沒有被強制執行 - 它們僅僅定義了協議,而沒有實際應用於類型。由於它們沒有被強制執行,使用接口還是個好主意嗎?如果Go的接口沒有被強制執行,它們是否有必要?
1
A
回答
7
是的。 Go不允許構建類型層次結構,因此接口對於允許某些多態性非常重要。考慮在封裝sort
定義的sort.Interface
:
type Interface interface {
// Len is the number of elements in the collection.
Len() int
// Less returns whether the element with index i should sort
// before the element with index j.
Less(i, j int) bool
// Swap swaps the elements with indexes i and j.
Swap(i, j int)
}
的sort
包中包含的功能sort(data Interface)
一個期望實現該接口的任何對象。沒有接口,這種形式的多態將不可能實現。事實上,你不必顯式註釋你的類型實現了這個接口,是無關緊要的。
關於go的一個很酷的部分是,你甚至可以在原始類型上實現這個接口,只要類型是在同一個包中定義的。所以,下面的代碼定義整數數組排序:
type Sequence []int
// Methods required by sort.Interface.
func (s Sequence) Len() int {
return len(s)
}
func (s Sequence) Less(i, j int) bool {
return s[i] < s[j]
}
func (s Sequence) Swap(i, j int) {
s[i], s[j] = s[j], s[i]
}
0
我希望知道類型檢查,既靜和在運行時是什麼,但我不知道什麼是「強制的接口」。
相關問題
- 1. NHibernate的UniqueKey沒有被強制執行
- 2. 外鍵沒有被強制執行
- 3. 如何使接口強制執行沒有setter?
- 4. 有沒有辦法檢查嚴格模式是否被強制執行?
- 5. 強制執行Go類型來實現接口
- 6. 在Python中設置方法,它們是否有必要?
- 7. 是否有必要重置cout,cerr和clog的rdbuf,如果它們已被更改爲重定向到文件?
- 8. 是否有必要有base64_encode
- 9. 卡夫卡的retention.ms沒有被卡夫卡0.10.2強制執行?
- 10. 如果聲明沒有被執行,當它預計工作
- 11. 有沒有辦法強制before_filter總是最後執行?
- 12. 角度日期分鐘沒有被強制執行
- 13. 表單輸入約束沒有被強制執行?
- 14. Ext.form.Panel提交()超時沒有被強制執行
- 15. PreparedStatement變量或它們的位置要求是否有限制?
- 16. 在接口中強制執行「等於」
- 17. 是否有解析強制執行文檔的C++的工具
- 18. 是否有MySQL/MariaDB的強制執行CHECK的引擎?
- 19. 如果元素被移除,打破setInterval是不是有必要?
- 20. 它沒有被增強,但它的超類[類play.db.ebean.Model]是?
- 21. 是否有強制執行finalize()方法的方法
- 22. 帶有self.view.frame的initWithFrame:是否有必要?
- 23. 有沒有辦法強制類加載器加載一個包,即使它們的類沒有被加載?
- 24. 如何,如果它沒有被啓用
- 25. 是否是任何jsp 2.0實現,如果tagdir屬性沒有結尾斜槓,則強制執行錯誤?
- 26. RAD的自動生成的EJB存根,它們是否有必要?
- 27. 是否可以強制更新接口?
- 28. 如果沒有設置高度限制,是否重要?
- 29. 如何強制Java編譯錯誤,如果@Override是不必要
- 30. 是否有辦法強制執行@Test(enabled = false)測試?
你是什麼意思的「執行」?值必須實現一個接口才能分配給它,並且這由類型檢查器強制執行。你不必聲明一個類型實現了一個接口,但這是通過設計,而不是一個問題。 – SteveMcQwark
什麼是「C風格的界面」?你的意思是Go不「強制」接口? Go編譯器肯定會強制,當你將一個類型傳遞給一個接受某個接口的函數時,該接口就會實現,它在編譯時靜態地完成這個工作,這也是使Go變得更好的原因之一。 – uriel
-1:這個問題是基於Go的接口沒有被強制執行的錯誤概念。 http://play.golang.org/p/V65p3FMvPO – weberc2