日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

go2 泛型

發布時間:2023/12/16 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 go2 泛型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

學習資料: https://gocn.vip/topics/10071

https://www.bilibili.com/video/av97437986?zw

1 泛型起源,go為什么需要泛型
還記得大學的時候王少榮老師教過c++,里面有一個多態的概念:同一形式表現出不同行為。具體來說呢:
1 臨時性多態: 根據實際參數類型調用對應的函數。

func Add(a, b int) int {return a+b} func Add(a, b float) float{return a+b} // go 中無法使用同名函數

2 參數化多態: 根據實際參數類型生成不同的版本 , 支持任意數量的調用,即泛型

func Add(a, b T) T {return a+b}

這很容易讓我們想起interface,泛型和它的區別在于。
當T為interface時,a和b可以是不同的類型,當使用泛型時a、b、返回值必須為同一類型。所以我們一般說泛型快&安全。 快=靜態類型,安全=編譯時會甄別錯誤。(類型推導錯誤判斷)
既然go作為一門動態語言,所以泛型是很有必要的

go1 (2010 和 2011年 都有初始的泛型設計 模仿c++的做法)有諸多問題,跳過不寫
13年設計的時候帶入了類型推導,用戶不需要寫泛型的代碼:

type Int int func F(){a, b := 0, Int(1)m := MAX(a,b) // a先被忽略,解析b時認為a時Int }

這里可以去看看類型推導公式。但是在類型推導的時候還是有很多問題。包括一些邏輯的矛盾。兩個月出了一版非常完美的設計,但由于功能過于復雜,被寫編譯器的人否定了。。。然后泛型就被歸檔了。

后來14年有個人寫了一版genny實現泛型,但是編譯器無法做類型檢查,開發人員如果粗心傳錯了參數,程序運行時會崩潰,總的來說就是不夠安全。

15年bryan mills引入了一個gotype的版本,但gotype的類型推導還是用戶自己寫代碼判斷的。
之后再沒人設計了。

在18年go 2要出生了,泛型問題一定要被解決。
引入了合約 contract。

總結

以上是生活随笔為你收集整理的go2 泛型的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。