正式支持泛型!Go語言發布有史以來最大更新
美國時間2022年3月15日,Go核心團隊官宣了Go 1.18版本正式版的發布,其官博稱之為“整個Go社區的一個巨大的里程碑”。在這個版本中,Go核心團隊做了Go語言開源以來的最大一次語法特性變更——增加了對泛型(generics)的支持。
這里簡要整理一下 Go 1.18版本的重大更新。
泛型(Generics):在Go 1.18版本中,引入了對使用參數化類型的泛型代碼的新支持。支持泛型是Go最常被要求添加的功能特性,這一版本能夠提供大多數用戶目前需要的泛型支持。隨后的版本將繼續為一些更復雜的泛型用例提供額外支持。Go官方提供了泛型教程來幫助開發者了解這個新功能,探索使用泛型來優化和簡化代碼的方法。
模糊測試(Fuzzing):伴隨著Go 1.18版本的發布,Go成為第一個將模糊測試完全整合到其標準工具鏈中的主要編程語言。這意味著與其他語言不同,不需要第三方支持集成。作為一種測試軟件漏洞的方法,模糊測試的集成為Go的代碼增加了一層額外的安全保障,尤其在當下,隨著網絡攻擊在頻率和復雜性上不斷升級,這一點顯然至關重要。在Go的模糊測試中,會使用隨機的數據對代碼進行測試,以嘗試找出漏洞或導致崩潰的輸入。可以通過模糊測試發現的一些漏洞示例包括 SQL 注入、緩沖區溢出、拒絕服務和跨站點腳本攻擊。Go官方也提供了模糊測試教程,來幫助用戶理解使用這個新功能。
工作區(Workspaces):當前,Go module幾乎已被普遍接納和采用。在Go團隊2021年的用戶調查中,用戶反饋Go module的最常見的挑戰是跨多個module工作。Go 1.18版本通過新的Go工作區模式(Go workspace mode)解決了這一問題,這使得在多個module中工作變得簡單。
20%的性能改進:對于蘋果M1、ARM64和PowerPC64用戶來說,這是一條絕對的好消息。由于Go 1.17的寄存器ABI調用約定擴展到這些架構,Go 1.18的CPU性能提升幅度高達20%。
關于這一版本更詳細的信息,可查閱Go 1.18發布說明(https://go.dev/doc/go1.18)。
2007年9月,在Rob Pike 回復給 Robert Griesemer、Ken Thompson 的郵件中,談到了一門全新的編程語言,其設計仍在雛形中,建議將之取名為Go。在敲定名字之后,Rob、Robert、Ken 三人開始在 Google 內部進行研發。
2008年5月,Go的研發獲得了 Google 的全力支持。
2009年11月10日,Go 項目團隊首次公開發布該語言,并將代碼全部開源,這一天也被定為Go的官方生日。其源代碼最初托管在?http://code.google.com?上,之后幾年才逐步的遷移到 GitHub 上。
- 2011年,Go 語言的第一個穩定(stable)版本 r56 發布。
- 2012年,Golang 的第一個正式版本 Go1 發布。
- 2013年:Go 1.1 和 Go 1.2 正式版本發布。
- 2014年:Go 1.3 和 Go 1.4 正式版本發布。
- 2015年:Go 1.5 正式版本發布。
- 2016年:Go 1.6 和 Go 1.7 正式版本發布。
- 2017年:Go 1.8 和 Go 1.9 正式版本發布。
- 2018年:Go 1.10 和 Go 1.11 正式版本發布。
- 2019年:Go 1.12 和 Go 1.13 正式版本發布。
- 2020年:Go 1.14 和 Go 1.15 正式版本發布。
- 2021年:Go 1.16 和 Go 1.17 正式版本發布。
可以看到,自從踏上發展正軌后,Go語言基本保持了每半年發布一次的更新頻率。綜合來看,Go 開源至今已逾12年,盡管背靠大樹,但其發展過程仍然比較曲折。最初發布時獲得了一定關注,而后就開始走下坡路,直到2015年重新設計優化 GC 實現后才開始觸底反彈,2016年重新流行起來,直到現在也維持在主流編程語言之列。
當前,Go 語言在國內也熱度頗高。一方面是基于其高效的開發方式,另一方面則因為Go 語言天生“為云而生”,在全面擁抱云的時代得天獨厚。
對開發者來說,Go 語言在保證了快速編譯的同時,也保證了高效的開發效率和程序運行性能。相較于 Java 和 C++ 的滯重,Go 語言可以讓開發速度更快、更容易,且性能也不差。此外,Go 語言的特性也不多,更容易上手,尤其對有 C 語言基礎的同學,學習成本較低。
放眼全球,使用 Go 語言的大公司和優秀開源項目都比較多。有人稱 Go 為云端的編程語言。因為 Go 語言生成的二進制可執行文件很小,快速啟動,內存占用也很小,在容器中運行時,沒有遺留負擔。很多CNCF項目,包括Kubernetes和Istio,都是用Go編寫的。
隨著基礎設施的不斷云化,Go 語言的發展未來可期。