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