鸽王自白

此文本该写在 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 动词用于创建包装错误。

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

Go 语言排名变化

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

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

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

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 之间闹得很僵。

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

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

Go 未来的发展

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

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

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

简化四原则:

  • Simplify by Reshaping(重构)

  • Simplify by Redefining(重新定义)

  • Simplify by Removing(删除多余)

  • Simplify by Restricting(严格规范)

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

而且已经有了草案:

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楼鱼秀学堂!

报名请戳:阅读原文

Go中国

扫码关注

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

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

  1. Java SE 6生命将在今年11月终结

    甲骨文近日发布了一则公告,推迟了Java SE 6的终结期限. 根据原定计划,JDK 6和Java SE 6将在今年7月份终结,现在该日期已经被推迟到了11月份.甲骨文称,之所以推迟,是为了给予开发者 ...

  2. 我心如水_Win8_PE_x64_x86_无忧启动终结版

    兼容32位.支持网络.支持UEFI与EFI启动. 支持量产.刻盘.U+不隐藏.普通隐藏.高端隐藏...安装. ISO也能放入UD启动. 最新x64.x86 的实用程序.维护计算机足够. "管 ...

  3. jvm的类加载和运行时数据区和垃圾回收

    类加载过程 加载(loading) 引导类加载器 扩展类加载器 系统类加载器 1.通过一个类的全限定名获取此类的二进制字节流 2.将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构 3.在内 ...

  4. 《深入理解Java虚拟机》-周志明 -第3版-第一章摘记

    第一章讲了java的发展和变迁,在章节末作者讲到了编译openjdk源码和调试源码 java发展史 java的诞生起因史1991年4月,James Gosling博士领导的绿色计划(Green Pro ...

  5. 揭秘中国十大暴利行业(组图)

    揭秘中国十大暴利行业(组图) 房地产:富翁摇篮票数:26% 从26个候选行业中选出2008年的十大暴利行业,依次为房地产.眼镜.殡葬.通讯.药品.高速公路.化妆品.教育.婚纱摄影.网络游戏,房地产业位 ...

  6. macbook历代_苹果2006至2015历代MacBook简要回顾

    2006年5月份的时候,苹果悄然取消了12英寸的PowerBook和12/14英寸的iBook机型,取而代之的是13.3英寸的MacBook.作为苹果从PowerPC处理器向Intel迁移的最后一步, ...

  7. 微软的 Windows 终究没落了!

    曾经微软就是 Windows 公司,如今 Windows 部门都早已不在,它还能在在时代的长河之中屹立多久? 来源:The Verge 33 年,一代枭雄 Windows 走向没落 33 年前,微软凭 ...

  8. macbook历代_苹果历代MacBook笔记本简要回顾

    2006年5月份的时候,苹果悄然取消了12英寸的PowerBook和12/14英寸的iBook机型,取而代之的是13.3英寸的MacBook.作为苹果从PowerPC处理器向Intel迁移的最后一步, ...

  9. Java 的发展历史1991-2022

    1991–1994 Green Project 此计划最初的目标 是开发一种能够在各种消费性电子产品(如机顶盒.冰箱.收音机等)上运行的程序架构. 作为 Green Project 的一部分,Sun ...

  10. 《Java Concurrency in Practice》中文版笔记

    第1章 简介 1.1 并发简史 茶壶和面包机的生产商都很清楚:用户通常会采用异步方式来使用他们的产品,因此当这些机器完成任务时都会发出声音提示. 1.2 线程的优势 线程能够将大部分的异步工作流转换成 ...

最新文章

  1. POJ-2407 欧拉函数
  2. html5 dropdownlist,使用HTML5 FindByValue下拉列表(html5 dropdownlist using F
  3. 一个简单示例 利用jawin完成调用window中dll的调用
  4. 炫彩流行艺术海报,品味不止一点点
  5. 计算机控制与网络,网络与通信技术在计算机控制的作用
  6. iOS开发:remove reference与move to trash的区别
  7. freeimage 安装错误
  8. android 支付宝 6002,支付宝调用H5支付页面返回6002网络连接错误
  9. 运放的开环增益和相移
  10. VTK学习之激光点云动态库封装(排水管道)
  11. 3 Idiots ——谢 阿米尔·汗
  12. 【hadoop生态之Hive】Hive的DML数据操纵语言【笔记+代码】
  13. 图片提取利器,从PDF中快速提取图片并存储到本地
  14. (向量空间)概念和法则的人为定义 I
  15. Active/Active与Active/Passive
  16. 利用appimage工具对开发好的项目进行打包
  17. 银河麒麟V10桌面 佳能打印机驱动安装
  18. Android打包混淆压缩
  19. 开锁(unlock) | 题解
  20. elance 兼职手册

热门文章

  1. vulnhub:Who Wants To Be King: 1
  2. 接力队选拔matlab,这是我见过的操作最好的接力队之一= =
  3. Python-Pyecharts画图(饼图,雷达图,词云)[二]
  4. rhel7 卡在sda assuming drive cache write through不能进入操作系统的一个解决方案
  5. Transformer靠什么基因,得以闯入CV界秒杀CNN?
  6. 《Beyond Part Models: Person Retrieval with Refined Part Pooling 》PCB论文解读
  7. 排球分组循环交叉编排_同学!中国海洋大学第一届排球联赛等你来战!
  8. win10 wsl 安装 ubuntu 16.04
  9. 经典音频MUTE电路分析
  10. 【GPS周-周内秒、BDS周-周内秒转换与逆转换】