Go 語言今年 11 歲,何去何從,現(xiàn)狀到底如何?
本文轉(zhuǎn)載自微信公眾號「腦子進煎魚了」,作者陳煎魚。轉(zhuǎn)載本文請聯(lián)系腦子進煎魚了公眾號。
不說不知道,一說下一跳。Go 語言已經(jīng)開源 11 周年了,感覺是一路高歌,Release History (polarisxu 整理)如下:
- 2011 年 3 月 16 日,Go 語言的第一個穩(wěn)定版本 r56 發(fā)布;
- 2012 年 3 月 28 日,Go 語言的第一個正式版本 Go1 發(fā)布,并承諾 1.x 的 兼容性;
- 2013 年 5 月 13 日,Go1.1 正式版才發(fā)布。
- 2013 年 12 月 1 日,Go1.2 正式發(fā)布;
- 2014 年 6 月 18 日,Go1.3 正式發(fā)布;
- 2014 年 12 月 10 日,Go1.4 正式發(fā)布;
- 2015 年 8 月 19 日,Go1.5 正式發(fā)布。該版本實現(xiàn)了自舉,即移除了 C 代碼,使用 Go 開發(fā) Go 語言;
- 2016 年 2 月 17 日,Go1.6 正式發(fā)布;
- 2016 年 8 月 15 日,Go1.7 正式發(fā)布;引入 context 包;
- 2017 年 2 月 17 日,Go1.8 正式發(fā)布;
- 2017 年 8 月 24 日,Go1.9 正式發(fā)布;引入別名;
- 2018 年 2 月 16 日,Go1.10 正式發(fā)布;
- 2018 年 8 月 25 日,Go1.11 正式發(fā)布。開始強勢支持 Go modules;
- 2019 年 3 月 1 日,Go1.12 正式發(fā)布;
- 2019 年 9 月 3 日,Go1.13 正式發(fā)布;
- 2020 年 2 月 25 日,Go1.14 正式發(fā)布;goroutine 支持異步搶占調(diào)度;
- 2020 年 8 月 11 日,Go1.15 正式發(fā)布;
- 2021 年 2 月,預計 Go1.16 正式發(fā)布;將包含新的文件系統(tǒng)接口和支持在構(gòu)建時的靜態(tài)文件嵌入,鏈接器的重寫,Go modules 默認開啟且正式對 Apple Silicon(GOARCH=arm64)Mac 進行支持。
目視現(xiàn)在
現(xiàn)在的 Go 語言在國內(nèi)已經(jīng)掀起了一浪又一浪的熱潮,炒的非?;馃?。各大平臺極客時間、拉勾教育、掘金小冊、慕課網(wǎng)等紛紛出現(xiàn)了大量 Go 語言相關(guān)的付費專欄/視頻。
在現(xiàn)實工作層面,字節(jié)跳動、騰訊向 Go 語言側(cè)偏,以及其它各大一二線廠均出現(xiàn)了不少 Go 的崗位,也正預示著當前已經(jīng)到了一個比較好風口。
在開源項目層面,Kubernetes、Etcd、Prometheus、Docker 等大量的云原生相關(guān)組件均以 Go 語言開發(fā),懂一門 Go 語言,排查問題也更方便了。
與企業(yè)開發(fā)層面,出現(xiàn)了大量其他語言的開發(fā)者向 Go 語言轉(zhuǎn)型,在企業(yè)的軟件開發(fā)中出現(xiàn),新項目用 Go 語言,老項目保留,形成同時維護新老系統(tǒng),再漸遷的絞殺者模式:
絞殺者模式
在面試中比較常見的是 PHP、C++ 語言,就會在企業(yè)中形成了 Go+PHP(新+老系統(tǒng))的局面,又或是 Go 調(diào) CGO 的運行模式。這也得益于 Go 語言的易用性和一定的膠水特性。
在培訓機構(gòu)層面,各大機構(gòu)都多少曾經(jīng)向 Go 語言發(fā)起過進攻,但目前 Go 語言大多以中高級人才為主,也就是有過其他語言經(jīng)驗的軟件開發(fā)從業(yè)者為主。因此培訓機構(gòu)的市場行情相對較差。
在社會招聘和崗位層面,狹義上來看,與 2018 年我寫的 《帶你了解一下Golang的市場行情》基本情況仍保持一致:
2018 年市場行情分析
以下為 GoCN 所收集的 “2020 中國Go 開發(fā)者調(diào)查報告” 的地域分布:
2020 中國Go 開發(fā)者調(diào)查報告
Go 語言的大熱門地區(qū)依然是:北京、上海、深圳,主體集中在一線城市,機會這里最多。
看看數(shù)據(jù):TIOBE
從 TIOBE 的編程語言排行榜來看,整體上 Go 語言的熱門程度并不會特別高(與老牌語言相比),但作為一門編程語言在短短 11 年內(nèi)已有很不錯的表現(xiàn):
TIOBE 排行榜
同時業(yè)內(nèi)時常說 Go 語言要干掉 PHP、C++、Java 等,目前來看短期內(nèi)不現(xiàn)實,官方也沒有這方面打算,因為合適的場景選擇合適的語言就好了。
TIOBE 提示本月的排名在第 13 名,且最高排名出現(xiàn)在 2020 年 5 月,在第 10 名,近期基本穩(wěn)定在這個位數(shù)附近,至少近年是干不掉老大哥們的。
展望未來
Go1 目前一如既往的遵守了 Go1 兼容性承諾,這給不少正在使用 Go 語言的企業(yè)帶來了一注強心針。但給 Go 語言也帶來了一些 “麻煩”。那就是存在破壞性變更的變動無法在 Go1 中實現(xiàn)。
因此為了解決一些 ”問題“,也想達到更好的特性目標。2018 年時釋出了 Go2 的計劃,詳細可參見Go 2, here we come!,其中包含了大量的功能特性。
從目前的基本論調(diào)和實際情況來看,可兼容實現(xiàn)的,都會在 Go1 實現(xiàn),例如大家最期待的功能之一 ”泛型“,預計最早會在 Go1.17 會釋出,樣例:
- // Print prints the elements of any slice.
- // Print has a type parameter T and has a single (non-type)
- // parameter s which is a slice of that type parameter.
- func Print[T any](s []T) {
- // same as above
- }
其在 6 月下旬發(fā)布了最新的設(shè)計草稿,若對泛型有更進一步需求可關(guān)注 design/go2draft-type-parameters,而一些不兼容的修改,若確切評估后無法直接實現(xiàn)的,將會到 Go2 的 計劃中去:
Milestones
相信 Go2 發(fā)布時,肯定也不是 go run xxx 了,估計會變更命令集,以示區(qū)分。
總結(jié)
11 歲,Go 語言目前在國內(nèi)已經(jīng)火起來了,最近接觸的一個運營大佬稱 Go 語言為 “準備霸占未來語言半壁江山” 的語言。還在觀望的讀者可以考慮下手,吃一波紅利。
但現(xiàn)階段的 ”成功“ 并不代表后續(xù)一定持續(xù)強勁,背后離不開所有開發(fā)者在社區(qū)開源的努力。
TIOBE Index
我們一起思考兩個問題:
- 你為什么喜歡 Go 語言?他有什么短板?
- 如果 Go 語言想繼續(xù)占領(lǐng)更多的市場,需要在什么領(lǐng)域發(fā)力?
你的答案是什么?在評論區(qū)告訴大家吧!