go2 泛型
學習資料: https://gocn.vip/topics/10071
https://www.bilibili.com/video/av97437986?zw
1 泛型起源,go為什么需要泛型
還記得大學的時候王少榮老師教過c++,里面有一個多態的概念:同一形式表現出不同行為。具體來說呢:
1 臨時性多態: 根據實際參數類型調用對應的函數。
2 參數化多態: 根據實際參數類型生成不同的版本 , 支持任意數量的調用,即泛型
func Add(a, b T) T {return a+b}這很容易讓我們想起interface,泛型和它的區別在于。
當T為interface時,a和b可以是不同的類型,當使用泛型時a、b、返回值必須為同一類型。所以我們一般說泛型快&安全。 快=靜態類型,安全=編譯時會甄別錯誤。(類型推導錯誤判斷)
既然go作為一門動態語言,所以泛型是很有必要的
go1 (2010 和 2011年 都有初始的泛型設計 模仿c++的做法)有諸多問題,跳過不寫
13年設計的時候帶入了類型推導,用戶不需要寫泛型的代碼:
這里可以去看看類型推導公式。但是在類型推導的時候還是有很多問題。包括一些邏輯的矛盾。兩個月出了一版非常完美的設計,但由于功能過于復雜,被寫編譯器的人否定了。。。然后泛型就被歸檔了。
后來14年有個人寫了一版genny實現泛型,但是編譯器無法做類型檢查,開發人員如果粗心傳錯了參數,程序運行時會崩潰,總的來說就是不夠安全。
15年bryan mills引入了一個gotype的版本,但gotype的類型推導還是用戶自己寫代碼判斷的。
之后再沒人設計了。
在18年go 2要出生了,泛型問題一定要被解決。
引入了合約 contract。
總結
- 上一篇: 让zheng支持activiti工作流
- 下一篇: GPU 频率设置