AI 年度盘点与2025发展趋势展望,50+案例解析亮相AICon 了解详情
写点什么

解读 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:224017
用户头像

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

关注

评论 2 条评论

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

MediaMuxer实用封装

Changing Lin

8月日更

【Jackson技术专题】全方位系统化学习和使用指南

洛神灬殇

Jackson JSON库 JSON序列化 8月日更

【Vue2.x 源码学习】第二十三篇 - 依赖收集 - 视图更新部分

Brave

源码 vue2 8月日更

中高级Java面试中你不得不会的知识点,附详细答案

JVM调优资料

Java 程序员 后端

肝到头秃!阿里爆款的顶配版Spring Security笔记

Java spring 程序员 架构 计算机

如何使用 DDD 指导微服务拆分?

架构精进之路

微服务 DDD 8月日更

极光开发者周刊【No.0730】

极光JIGUANG

中高级Java大厂高频面试题,已开源下载

JVM调优资料

Java 程序员 后端

五面阿里拿下飞猪事业部offer,帮你突破瓶颈

JVM调优资料

Java 程序员 后端

Redis挂了,流量把数据库也打挂了,怎么办?

why技术

Java 面试

为什么spring能最好地改变Java?成功跳槽阿里!

JVM调优资料

Java 程序员 后端

Apache ShardingSphere 元数据加载剖析

SphereEx

数据库 开源

Java线程安全-JVM角度解析

程序员阿杜

Java JVM 多线程 并发 8月日更

京东面试真题解析,帮你解决95%以上的问题!

JVM调优资料

Java 程序员 后端

SpringBoot使用Junit5

Rubble

springboot JUnit 8月日更

CIS Kubernetes 基线测试

greatersecurity

Ubuntu 与 Mac 共享文件

TroyLiu

ubuntu 效率 Mac 文件传输 共享文件

三面拼多多,一篇文章帮你解答

JVM调优资料

Java 程序员 后端

为什么大公司一定要使用微服务?神操作!

JVM调优资料

Java 程序员 后端

五年Java开发者小米、阿里面经,附相关架构及资料

JVM调优资料

Java 程序员 后端

MySQL触发器介绍

Simon

MySQL

是谁,在暗中观察

skow

Java 后端 Java设计模式 8月日更

synchronized 加锁 this 和 class 的区别!

王磊

Java 并发 8月日更

图片风格迁移:基于实例缓解细节丢失、人脸风格化失败问题

华为云开发者联盟

神经网络 风格 实例 风格迁移 图像翻译

MySQL不能没有字符串函数,就像西方不能失去耶路撒冷

北游学Java

Java MySQL 数据库

Hudi自带工具DeltaStreamer的实时入湖最佳实践

华为云开发者联盟

大数据 Hudi

为什么@Value可以获取配置中心的值?年薪超过80万!

JVM调优资料

Java 程序员 后端

五分钟搞懂MySQL主从复制原理,附带学习经验

JVM调优资料

Java 程序员 后端

硬核万字长文,深入理解 Java 字节码指令(建议收藏)

沉默王二

Java

【共识专栏】共识的分类(下)

趣链科技

区块链 共识机制 共识算法 共识分类

中国首位 K8s ingress-nginx reviewer 同时提名成为 Apache APISIX committer

API7.ai 技术团队

开源 Kubernetes 采访 APISIX

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