写点什么

解读 2018 之 Go 语言篇(下):明年有哪些值得期待?

  • 2018-12-19
  • 本文字数:2586 字

    阅读完需:约 8 分钟

解读 2018之Go语言篇(下):明年有哪些值得期待?

2018 年接近尾声,InfoQ 策划了“解读 2018”年终技术盘点系列文章,希望能够给读者清晰地梳理出重要技术领域在这一年来的发展和变化。本篇文章是 Go 语言 2018 年终盘点的下篇,上篇对 2018 年 Go 语言的技术发展现状进行了回顾和盘点,本篇是对明年可能的发展情况进行的预测和展望。


笔者相信,真正的 Go 语言爱好者们在每一年都会对这门编程语言有所期待。这些期待有的可能是针对某项改进的,有的可能是针对某个特性的。不论怎样,我们都希望这门编程语言能越来越强大,同时也越来越符合自己的口味。不过,正所谓众口难调,我们也不必去纠结那些细枝末节。只要她能向着更优秀的方向发展,并能够产生好的结果可以了。没错,我说的就是早已埋下伏笔但在今年才爆发的正牌依赖管理工具之争。最后还是 vgo 获胜了,笔者觉得这也是必然的。


好了,这些风波和八卦我们暂且不提。接下来,我会向你提供一些 Go 语言在未来发展的线索,有短期的也有长期的。不知道你怎么看,反正我个人对这些进展都是翘首期盼的。(如果大家还希望了解更多详情,还可以看下笔者在极客时间的Go语言专栏

Go 1.12

笔者首先盼望的肯定是 Go 语言依赖管理机制的第一个稳定版,并且相信很多 Go 语言爱好者都是如此。但是,在笔者看来,这个稳定版本并不一定就会在 Go 语言的 1.12 版本中发布,虽然目标是这样的。


正如前文所述,Go 1.12 会从 godoc 命令中去掉命令行接口,而只保留基于 Web 的图形化查询界面。同时,它也不再允许开发者通过 GOCACHE 环境变量去禁用构建结果缓存。当然了,这个版本也会包含大量针对标准库的改进,详细内容可以到此版本的发布说明草稿中查看。

Go 2

在去年我们就说过,Go 语言官方已经把 Go 2 的计划郑重地摆上了桌面。今年的进展是,Go 2 的设计草案已经发布了。


Go 语言作者之一 Robert Griesemer 不久前刚刚在官方博客发文称,Go 2 已经选择出备选新特性提案,进入提案反馈阶段,他呼吁社区积极参与进来,和官方团队一起改进 Go 语言设计。具体详情可以看 InfoQ 的报道《Go 2 提上日程,官方团队呼吁社区给新特性提案提交反馈》


目前来看,Go 2 将会主要解决三个问题,即:错误处理、错误值以及对泛型自定义的支持。


从多年前开始,很多 Go 程序开发者就已经在抱怨 Go 语言在错误处理方面的丑陋了。Go 函数的多返回值使我们可以在返回一般结果值的同时携带错误值。这是一个很亮眼的特性,可以让我们重视错误,并总是进行明确的处理。不过,这也带来了一个问题。我们在调用这样的 Go 函数之后,不得不先用 if 语句检查错误值是否为 nil,然后才能进行下一步处理。如果在我们的程序中有很多这样的代码,那么显然是很丑陋的。


不过,笔者认为,这很多都是开发者在程序设计方面存在问题导致的。然而,我们也并不能否认,Go 语言的这种错误处理方式是很多程序变得丑陋的导火索。不论怎样,Go 语言官方已经开始正视这个问题并在着手解决了。


与之相关的一个问题就是错误值的设计。我们知道,只要实现了 error 接口的数据类型就都可以被称为错误类型,它们的值就可以被称为错误值。创造一个错误值的方式有很多,调用 errors.New 函数、调用 fmt.Errorf 函数,以及使用值的字面量,等等。这恰恰使我们在对错误种类做判断的时候不得不仔细地选择判断方式,是检查错误值的类型?还是判断它是否等于某个已存在的错误值?又或者是对错误描述进行匹配?这显然增加了错误处理的成本。从草案上来看,已经有一些显著的成果了,我们还是拭目以待吧。


关于泛型,笔者并不想多说。允许泛型的自定义显然可以增强编程语言的表达能力,并且在一些场景下可以显著地减少重复的代码。不过,怎样将它设计好,并用优雅的方式展现出来,是一个很复杂的问题。在相应的草案中,Go 语言官方给出了一个看起来还不错的方案,但是依然可能存在变数。希望官方能够参考 C++、Java、Rust、Swift 等编程语言的设计,取其精华、去其糟粕吧。


关于详细的 Go 2 设计草案,大家可以到这里查阅。

社区与环境

笔者在今年明显的感觉到,关注 Go 语言的各路人马又变多了。这体现在了几个方面。首先,以 Go 语言为主题的 meetup 明显增多。无论是哪个技术组织发起的,参与的人都不在少数。而且,这样的 meetup 已经在更多的一、二线城市中出现了。


其次,互联网上的 Go 语言中文资料(比如博客、教程、电子书等)也明显增多,不论是免费的还是收费的,虽然水平各不相同,但是显然大家都在进行积极的探索和分享。


最后,很多主打技术培训的公司和组织都已经对 Go 语言进行了重点的关注,并开发出了自己的培训产品或服务,包括线上的知识付费产品、线下的面授课程,以及目标各有不同的开源项目,等等。笔者也有幸参与其中,并在极客时间开设了专栏《Go 语言核心 36 讲》。


不过,随着 Go 语言逐渐得到各方的广泛关注,盗版和抄袭也日益猖獗。笔者在这里呼吁,希望大家能够尊重原创作者的辛勤劳动和知识产权,拒绝盗版、抵制抄袭!只有这样才能够让作者们更加积极地产出优秀的内容,我们的学习环境才能更美好,技术社区才能因此向着健康、壮大的方向发展。


以上,就是我对 Go 语言在 2018 年发展的简要回顾和对其未来发展的展望。希望能够借此促使大家对 Go 语言和我们国内的技术社区有更多的关注。

参考文献

[1] Go 1.10 is released: https://blog.golang.org/go1.10


[2] Go 1.11 is released: https://blog.golang.org/go1.11


[3] Diagnostics: https://golang.google.cn/doc/diagnostics.html


[4] WebAssembly: https://github.com/golang/go/wiki/WebAssembly


[5] Modules: https://github.com/golang/go/wiki/Modules


[6] Go 1.12 Release Notes(DRAFT): https://tip.golang.org/doc/go1.12


[7] Nine years of Go: https://blog.golang.org/9years


[8] Toward Go 2: https://blog.golang.org/toward-go2


[9] Go 2 Draft Designs: https://go.googlesource.com/proposal/+/master/design/go2draft.md

延伸阅读:




作者简介


郝林,国内知名的 Go 语言技术布道者,GoHackers 技术社群的发起人和组织者。他也是极客时间专栏《Go语言核心36讲》的作者,以及图灵原创图书《Go 并发编程实战》的作者。他曾在轻松筹任大数据负责人,同时负责大数据部门和主站的后端技术团队。


2018-12-19 09:224054
用户头像

发布了 22 篇内容, 共 18.5 次阅读, 收获喜欢 85 次。

关注

评论 2 条评论

发布
用户头像
你好,文章可以否转载到GO语言中文网?https://studygolang.com/
2018-12-19 13:59
回复
您好,可以转载,转载请注明,本文为 InfoQ 中文站特供稿件,首发地址为:“InfoQ 中文站的发布链接”。
2018-12-19 14:27
回复
没有更多了
发现更多内容

K8S 中的 Grafana 数据持久化

耳东@Erdong

Kubernetes k8s Grafana 配置文件持久化

话说性能那些事

朱月俊

LeetCode题解:283. 移动零,JavaScript,一次遍历,详细注释

Lee Chen

大前端 LeetCode

米酒米酒黼子酒

zhoo299

美食

随着并发的增加,响应时间和吞吐的变化

朱月俊

性能优化(一)

olderwei

antd vue 使用upload组件action上传文件

Seven_xw1213

大前端 antd vue upload

八个排序的原理、Java 实现以及算法分析

多选参数

数据结构 算法 排序 排序算法 数据结构与算法

第 7 周 - 作业 2

seng man

重置 Grafana admin 密码

耳东@Erdong

Grafana Grafana password

总结

chenzt

架构师训练营Week7学习总结

Frank Zeng

第七周命题作业

天之彼方

Scrapy爬虫入门

烫烫烫个喵啊

python 爬虫

性能压测的时候,随着并发压力的增加,系统响应时间和吞吐量如何变化,为什么?

一叶知秋

架构师训练营第7周

大丁💸💵💴💶🚀🐟

elasticsearch 游标 使用

wkq2786130

elasticsearch

neo4j load csv 使用

wkq2786130

优秀的求职者,是如何巧妙应对面试提问呢?

xcbeyond

面试 加班 职业规划 薪资 自我介绍

如何找一碗正宗的热干面

zhoo299

美食

架构师训练营第7周

大丁💸💵💴💶🚀🐟

第7周总结+作业

林毋梦

MySQL 锁表后快速解决方法 及 锁表原因

wkq2786130

MySQL

antd vue upload组件使用customRequest上传文件显示文件上传进度

Seven_xw1213

大前端 antd vue upload customRequest 进度条

架构师0期07周作业

我在终点等你

解决 EXT4 使用无法挂载

耳东@Erdong

ext4 journal

过早三件套之面窝

zhoo299

美食

问题驱动

学习 问题驱动

第七周总结

天之彼方

Github 创建发行版本

耳东@Erdong

GitHub github release

架构师训练营第七周学习总结

fenix

极客大学架构师训练营

解读 2018之Go语言篇(下):明年有哪些值得期待?_语言 & 开发_郝林_InfoQ精选文章