Go 语言今年 11 岁,何去何从,现状到底如何?
不说不知道,一说下一跳。Go 语言已经开源 11 周年了,感觉是一路高歌,Release History (polarisxu 整理)如下:
- 2011 年 3 月 16 日,Go 语言的第一个稳定版本 r56 发布;
- 2012 年 3 月 28 日,Go 语言的第一个正式版本 Go1 发布,并承诺 1.x 的 兼容性;
- 2013 年 5 月 13 日,Go1.1 正式版才发布。
- 2013 年 12 月 1 日,Go1.2 正式发布;
- 2014 年 6 月 18 日,Go1.3 正式发布;
- 2014 年 12 月 10 日,Go1.4 正式发布;
- 2015 年 8 月 19 日,Go1.5 正式发布。该版本实现了自举,即移除了 C 代码,使用 Go 开发 Go 语言;
- 2016 年 2 月 17 日,Go1.6 正式发布;
- 2016 年 8 月 15 日,Go1.7 正式发布;引入 context 包;
- 2017 年 2 月 17 日,Go1.8 正式发布;
- 2017 年 8 月 24 日,Go1.9 正式发布;引入别名;
- 2018 年 2 月 16 日,Go1.10 正式发布;
- 2018 年 8 月 25 日,Go1.11 正式发布。开始强势支持 Go modules;
- 2019 年 3 月 1 日,Go1.12 正式发布;
- 2019 年 9 月 3 日,Go1.13 正式发布;
- 2020 年 2 月 25 日,Go1.14 正式发布;goroutine 支持异步抢占调度;
- 2020 年 8 月 11 日,Go1.15 正式发布;
- 2021 年 2 月,预计 Go1.16 正式发布;将包含新的文件系统接口和支持在构建时的静态文件嵌入,以及链接器的重写,且正式对 Apple Silicon(GOARCH=arm64)Mac 进行支持。
目视现在
现在的 Go 语言在国内已经掀起了一浪又一浪的热潮,炒的非常火热。各大平台极客时间、拉勾教育、掘金小册、慕课网等纷纷出现了大量 Go 语言相关的付费专栏/视频。
在现实工作层面,字节跳动、腾讯向 Go 语言侧偏,以及其它各大一二线厂均出现了不少 Go 的岗位,也正预示着当前已经到了一个比较好风口。
在开源项目层面,Kubernetes、Etcd、Prometheus、Docker 等大量的云原生相关组件均以 Go 语言开发,懂一门 Go 语言,排查问题也更方便了。
与企业开发层面,出现了大量其他语言的开发者向 Go 语言转型,在企业的软件开发中出现,新项目用 Go 语言,老项目保留,形成同时维护新老系统,再渐迁的绞杀者模式:
在面试中比较常见的是 PHP、C++ 语言,就会在企业中形成了 Go+PHP(新+老系统)的局面,又或是 Go 调 CGO 的运行模式。这也得益于 Go 语言的易用性和一定的胶水特性。
在培训机构层面,各大机构都多少曾经向 Go 语言发起过进攻,但目前 Go 语言大多以中高级人才为主,也就是有过其他语言经验的软件开发从业者为主。因此培训机构的市场行情相对较差。
在社会招聘和岗位层面,狭义上来看,与 2018 年我写的 《带你了解一下Golang的市场行情》基本情况仍保持一致:
以下为 GoCN 所收集的 “2020 中国Go 开发者调查报告” 的地域分布:
目前 Go 语言的大热门地区依然是:北京、上海、深圳,主体集中在一线城市,机会这里最多。
看看数据:TIOBE
从 TIOBE 的编程语言排行榜来看,整体上 Go 语言的热门程度并不会特别高(与老牌语言相比),但作为一门编程语言在短短 11 年内已有很不错的表现:
同时业内时常说 Go 语言要干掉 PHP、C++、Java 等,目前来看短期内不现实,官方也没有这方面打算,因为合适的场景选择合适的语言就好了。
TIOBE 提示本月的排名在第 13 名,且最高排名出现在 2020 年 5 月,在第 10 名,近期基本稳定在这个位数附近。至少近年是干不掉老大哥们的,但最近接触的一个运营大佬称其为 “准备霸占未来语言半壁江山” 的语言,你觉得呢?
展望未来
Go1 目前一如既往的遵守了 Go1 兼容性承诺,这给不少正在使用 Go 语言的企业带来了一注强心针。但给 Go 语言也带来了一些 “麻烦”。那就是存在破坏性变更的变动无法在 Go1 中实现。
因此为了解决一些 ”问题“,也想达到更好的特性目标。2018 年时释出了 Go2 的计划,详细可参见Go 2, here we come!,其中包含了大量的功能特性。
从目前的基本论调和实际情况来看,可兼容实现的,都会在 Go1 实现,例如大家最期待的功能之一 ”泛型“,预计最早会在 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 月下旬发布了最新的设计草稿,若对泛型有更进一步需求可关注 design/go2draft-type-parameters,而一些不兼容的修改,若确切评估后无法直接实现的,将会到 Go2 的 计划中去:
并且相信 Go2 发布时,肯定也不是 go run xxx
了,估计会变更命令集,以示区分。
总结
11 岁,Go 语言目前在国内已经火起来了,但现阶段的 ”成功“ 并不代表后续一定持续强劲,背后离不开所有开发者在社区开源的努力。我们一起思考如下问题:
-
你最喜欢 Go 语言哪些方面?
-
你认为 Go 语言目前还有哪些问题呢? 期望他解决哪一块内容?
-
如果 Go 语言想继续占领更多的语言市场,需要在什么领域发力?
以更具现化的 TLOBE Index for Go 趋势图来看:
你认为 2020 年后 Go 语言的走向会是怎么样,现在适合 “抄底” 吗?