写点什么

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

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

关注

评论 2 条评论

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

深入浅出 ESM 模块 和 CommonJS 模块

局外人

JavaScript node.js 前端 前端开发 模块化

程序员,如何避免无效会议?

蜜糖的代码注释

2月月更

欢迎客户支持自动化领域的新兴领导者 Percept.AI 加入 Atlassian 大家庭!

Atlassian

敏捷 Atlassian Jira JiraServiceManagement 客户服务

《人月神话》第十六章阅读笔记:没有银弹

panda

人月神话 阅读笔记 没有银弹

跨平台应用开发进阶(三): uni-app 实现资源在线升级/热更新

No Silver Bullet

uni-app 更新 版本升级 2月月更

蜜罐中利用jsonp跨域漏洞和xss漏洞的分析

H

网络安全 安全漏洞

给 zsh 自定义命令添加参数自动补全

mzlogin

Shell zsh

渗透利器 | 常见的WebShell管理工具

喀拉峻

网络安全

Web Components 系列(五)—— 详解 Slots

编程三昧

前端 组件化 2月月更 WebComponent

模块 7 作业

miliving

跨平台移动APP开发进阶(一):mui开发注意事项

No Silver Bullet

App 跨平台 2月月更 mui

springboot druid 数据库连接池连接失败后一直重连

Jeremy Lai

[架构实战营] 模块九作业

Geek_0ed632

「架构实战营」

DevOps进阶(二):DevOps 发展史

No Silver Bullet

DevOps 2月月更

模块二作业

blazar

「架构实战营」

华为云IoT体验:基于IoT平台构建智慧路灯应用

乌龟哥哥

2月月更

如何快速开发 Serverless Devs Package ?

Serverless Devs

Serverless

简析Web3 架构:前端、后端和数据

devpoint

区块链 dapp Solidity Web3.0 2月月更

《人月神话》第十九章阅读笔记:20年后的《人月神话》

panda

人月神话 概念完整性 阅读笔记

跨平台移动APP开发进阶(二):HTML5+、mui开发移动app教程

No Silver Bullet

跨平台 2月月更 mui

开杠面试官-微信朋友圈高性能架构

晨亮

「架构实战营」

架构实战营模块二作业-微信朋友圈复杂度分析

炎彬

「架构实战营」

自省与反思(一)

懒时小窝

反思 反思总结

Go 语言入门很简单:String

宇宙之一粟

Go 语言 2月月更

微信朋友圈业务架构分析

Geek_1b4338

#架构实战营 「架构实战营」

微信朋友圈高性能复杂度分析

「架构实战营」

[JAVA冷知识]JAVA居然可以多继承吗?让我们用内部类去实现吧!

山河已无恙

Java 2月月更

每天都扫的二维码,你知道它的技术原理吗?

慕枫技术笔记

后端 2月月更

iOS开发备战金三银四·突击大厂的算法与底层原理复习方向

iOSer

ios iOS面试 iOS底层 金三银四跳槽 算法面试

无人管的 InfoQ 每周精选

scruel

InfoQ

基于 SAP BTP 平台的 AI 项目经验分享 | 社区征文

汪子熙

人工智能 机器学习 AI 新春征文 2月月更

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