Asta:是什么终结了我的鸽王生涯?Go 1.13 发布! - Go语言中文社区

Asta:是什么终结了我的鸽王生涯?Go 1.13 发布!


鸽王自白

此文本该写在 Go1.13 版本发布之前……然而我就是传说中的鸽王,放了司徒很多次鸽子。直到 Go1.13 发布了,没有任何理由再拖延,也正好可以借着这一次新版本的发布介绍一下 Go 语言新特性和 Go Team 的变化,以及未来 Go 到底还会朝着怎么样的方向发展。





Go 1.13 带来的新特性

分析的文章有很多,我就不事无巨细地介绍了,这里重点拿几个我自己比较关心的特性来说一下。

1. Go 命令默认使用 Go module 

这也是Golang 1.13最重要的一个更新。环境变量 GO111MODULE 的默认值依然是 auto ,但是含义有所不同了:只要当前目录,或者某个父目录包含go.mod文件,那就采用 module 的方式来管理模块及依赖,不管当前目录是否在 GOPATH/src 下面。这里涉及到好几个环境变量,如 GOPROXY、GOPRIVATE、GOSUMDB、GONOPROXY 等。这个可以看一下前几天我们公众号的文章《goproxy.cn 为中国开发者量身打造模块代理》。

2. 对 defer 的使用效率普遍提高了30%

defer 这个功能虽然在开发上面带来了很多的便利性,但是对于深度使用 Go 的同学,很多时候你要调试性能的时候都会遇到这个问题,使用 defer 后的函数开销确实比没使用高了不少。

这个之前在社区里面也经常被吐槽,这一次的提升主要是在延迟对象的堆栈分配规则上带来了改进,但是这个适用于我们大多数的场景。

3. 错误包装

对错误处理的时候,支持嵌套,也就是一个 error 包含在另一个 error 里面。相应的,errors 包中增加了三个新的函数来支持 error 嵌套:errors.Unwrap、errors.Is、errors.As。错误 e 可以通过提供返回 w 的 Unwrap 方法来包装另一个错误 w。e 和 w 都可用于程序,允许 e 为 w 提供额外的上下文或重新解释它,同时仍然允许程序基于 w 做出决策。

为了支持包装, fmt.Errorf 现在有一个 %w 动词用于创建包装错误。

更多的新特性请大家扫码阅读这篇文章作为参考(不用翻墙哦?):

640?wx_fmt=png

Go 语言排名变化

今年 6 月 Go 语言首次进入全球使用人数最多的编程语言 Top15,看到排名公布时社区运营的小伙伴提出要我写一篇观后感,谈谈 Go 语言这些年的变化和发展趋势。而这篇文章终于随着 Golang 1.13 的发布正式完稿。

640?wx_fmt=png

运营 Go 中国社区的这几年,有很多朋友和公司找我帮忙推荐或发布招聘 Go 工程师,早期基本还是以一线城市需求居多。今年以来,体感 Go 工程师的需求明显增多,且二线城市也开始有这方面需求。在用人门槛上,有些甚至对用 Go 开发的年限没有很高的要求,对人才竞争进入了白热化阶段。当然,这跟 Go 本身简洁、易学易用也有很大关系,但仍足以体现出 Go 的需求和热度在持续增长。

640?wx_fmt=png

Hired 发布的《2019 软件工程师状态》所公布的最新数据显示:区块链和安全专业方面的人才尤为抢手,区块链工程师需求同比增长高达 517% ,安全工程师需求增长 132% 。而从全球编程语言流行度来看,Go 语言愈发受到从业者欢迎。

640?wx_fmt=png

Go在区块链联盟的招聘占比

Go 诞生 10 年的发展史与一个创业公司的发展颇为相似。早期 Go 的用户多以创业公司为主,以七牛云为首的全部核心代码都用 Go 写的公司少之又少。到 Docker、容器、微服务的出现,又有一批创业团队大规模的使用 Go。但此时众多大公司在语言转换上还是相当谨慎,大多数仅在非业务代码或非核心代码上尝试小范围的使用 Go。直到区块链和 kubernetes 技术的应用发展,让 Go 的使用人数、范围再一次带来了大规模的曝发。时至今日,我们可以看到越来越多的大公司在大规模的使用 Go,比如腾讯,我们知道的在使用 Go 的人数已经超过 3000 人。华为、阿里、百度、小米、今日头条、滴滴、拼多多等越来越多的大厂在 Go 的应用上尝试了更多的可能性,更有像探探、流利说、Grab、Klook、PingCAP这些核心业务全部用Go的新锐独角兽。

而正是中国 Go 生态的繁荣成就了中国在 Go 领域远远领先于其他国家的现状,对此中国的每一个 Gopher 都应该 Pride of you——是我们共同让 Go 成为了排名前 15 的语言,是我们让 Go 成为了全球最流行的语言之一,是我们让 Go 在每一个领域发光发彩。

Go Team的改变

Go Team 之前给社区的感觉都是非常强势,不大愿意听取社区的意见。例如当初依赖设计的时候,把社区早期的一批贡献者全部得罪了(当然 modules 是一个好东西,但是社区之前的 go dep 也是一个非常好的东西),导致当初社区和 Go Team 之间闹得很僵。

640?wx_fmt=png

而这一次 Go1.13 里面本来想改进 error 处理方式,增加 try关键字。如下图所示,Robert 提出方案,也有一点想强推的方式,但是最后终于在社区强烈的反对情况下关闭了。我觉得这是一个非常好的现象。Go Team 开始逐步改变做事方式,开始接受社区的意见,这一点也能从最近一次 Go Team 的 Lead Russ Cox 在 GopherCon 2019 上的发言中得以体现。我们所有做的这些不是白费,而是试验,为了更好的 Go2 。

我因为在新加坡、美国的时候和 Go Team 的人交流很多,就我个人的感受,他们都非常nice,非常容易交流,每一次他们都非常愿意听取我们的意见和建议。这几年我在做 GopherChina 的过程中,和他们核心团队交流比较多,例如他们每一年派怎么样的工程师来做分享,所以 Go Team 整体上给我的感受是积极鼓励社区发展壮大,但是在一些语言特性上面会“武断独裁”(个人觉得这样的态度也是需要存在的,这防止了 Go 语言在左右摇摆中变成四不像的东西)。

Go 未来的发展

关于Go的未来怎么发展,我觉得这一篇文章给了很多提示和方向(扫码直接阅读)。

640?wx_fmt=png

这是 Russ Cox 在今年 GopherCon 大会分享的内容,大概的思路就是下面这个逻辑——

640?wx_fmt=png

首先所有新功能都会在试验中去尝试,例如当初的dep功能。但是在试验的过程要去不断的简化,然后再发布,再形成新的循环,这样才能不断的向前发展。感觉这个和我现在创业是一个道理,因为我们永远不知道这条路应该怎么走, Go2 也是一样。

简化四原则:

  • Simplify by Reshaping(重构)

  • Simplify by Redefining(重新定义)

  • Simplify by Removing(删除多余)

  • Simplify by Restricting(严格规范)

按照目前这个发展模式,Go 1.13 版本已经实现了 Go 语言三大痛点里的两个——错误处理和依赖管理。依赖管理目前应该是一个比较满意的方案,错误处理可能还需要迭代几个版本才能完善。但是对于目前社区呼声最大的一个痛点:泛型,好消息是目前即将进入experiment 阶段,这一点 Ian 在 GopherCon 2019 上面分享了:

640?wx_fmt=png

而且已经有了草案:

https://github.com/golang/proposal/blob/master/design/go2draft-contracts.md

我之前大概学习了一下,感觉有点意思了,期待下一步的实现和simplify、ship,但是可以预期在14或者15版本会有这个特性。

之前在 Go 大会和 Dave 也沟通过 Go 的未来会怎么发展,因为他也是 Go 核心贡献者,从他的角度出发可能还是语言内核上面的改善,例如怎么样更好的做好逃逸分析、内存更高效的利用以及开发者如何更加高效的写出来高性能的程序。这一块我也通过 Andrew 那边得到验证,Go Team 在这一块后面会投入更多的资源在这个上面,所以 Go 在高性能场景会应用的越来越多

另一个发展方向就是应用层面。今年我们已经举办的几场meetup 上出来分享 Go 的讲师也带来了更多的场景,感觉 Go 正在润物细无声的潜入各个行业、各种应用场景,这个也是我们作为 Gopher 值得自豪的地方。第一我们的市场更广阔了,可选择的行业也更多了,可以做云计算,可以做区块链,可以做工业智能,可以做数据分析等等。第二我们的价值更高了,从我最近在boss直聘还是拉勾看到的招聘信息,这一块人才缺口太大了,薪资都比其他语言的高出很多,但是还是缺人,所以还没有入坑的同学抓紧时间了。

推荐阅读

Go 1.13虽迟但到,goproxy.cn 为中国开发者量身提供模块代理

重磅活动预告

Gopher Meetup 武汉站即将开启。来自斗鱼、小米、极验、前青云的大咖讲师带来 Go 开发领域的一线实践经验分享,尽在9月21日,光谷软件园F3栋12楼鱼秀学堂!

报名请戳:阅读原文

640?wx_fmt=jpeg

Go中国

扫码关注

国内最大、最活跃的 Go 开发者社区

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/RA681t58CJxsgCkJ31/article/details/100680936
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-01 10:26:46
  • 阅读 ( 1447 )
  • 分类:Go

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢