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

延伸阅读:

  • 解读 2018 之 Go 语言篇:为什么 Go 语言越来越热?
  • 解读 2015 之 Golang 篇:Golang 的全迸发时代
  • 解读 2016 之 Golang 篇:极速提升,逐步超越
  • Go 语言的 2017 年终总结

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

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

  1. 解读 2018之Go语言篇(上):为什么Go语言越来越热?

    2018年接近尾声,InfoQ 策划了"解读 2018"年终技术盘点系列文章,希望能够给读者清晰地梳理出重要技术领域在这一年来的发展和变化.本篇文章是Go语言2018年终盘点,分为 ...

  2. 解读 2018 之运维篇:我们离高效智能的运维还有多远

    2018 年接近尾声,InfoQ 策划了"解读 2018"年终技术盘点系列文章,希望能够给读者清晰地梳理出重要技术领域在这一年来的发展和变化.本篇文章是运维领域 2018 年终盘点 ...

  3. 直播 | ACL 2021论文解读:低资源语言场景下的跨语言文本摘要

    「AI Drive」是由 PaperWeekly 和 biendata 共同发起的学术直播间,旨在帮助更多的青年学者宣传其最新科研成果.我们一直认为,单向地输出知识并不是一个最好的方式,而有效地反馈和 ...

  4. 深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)

    作者:Lucida 微博:@peng_gong 豆瓣:@figure9 原文链接:http://zh.lucida.me/blog/java-8-lambdas-insideout-language- ...

  5. linux下软件编译终止,[2018年最新整理]linux下编译运行程序命令大全.ppt

    [2018年最新整理]linux下编译运行程序命令大全 1. 项目课题引入 2. Vi编辑器的使用方法 3. Linux中C语言程序的编辑 4. Linux中C语言程序的运行 5. 现场演示案例 课题 ...

  6. 我的第一个ASP类(显示止一篇下一篇文章)

    面向对象是现今编程语言的潮流,不过,ASP对面向对象的支持可是寒碜地很.现在感觉ASP的类也不过是一堆函数而已. 不过,在学校时没有学过面向对象的语言,我对面向对象的认识仍然是从ASP开始的. 记下我 ...

  7. 右脑编程法--左脑是基础(4)之语言篇

    前段时间出差了,所以没有及时更新写作内容.幸好关注的人还不是特别多,我的压力不算大,自我安慰一下下. 今天我们终于切到一个程序猿/媛职业中最基本,也是最重要的部分了,那就是编程语言.对于不会编程的人来 ...

  8. java文章上一篇下一篇_每个人都必须阅读的10篇Java文章

    java文章上一篇下一篇 一个月前,我们发布了每个人都必须阅读的10篇SQL文章列表. 我们相信jOOQ博客上的文章列表将为我们的读者带来非凡的价值. jOOQ博客是一个专注于Java和SQL的博客, ...

  9. java语言 爱我,语言篇:Java环境

    语言篇:Java环境 Java是什么? Java 是一项用于开发应用程序的技术语言,可以让 Web 变得更有意思和更实用.使用 Java 可以玩游戏.上载照片.联机聊天以及参与虚拟体验,并能够使用联机 ...

最新文章

  1. 帖子删除显示帖子名称?
  2. 入门:PHP:hello world!
  3. 10-20国际电极标准系统
  4. 神策数据全新服务体系——打造用户行为分析领域服务最高标准
  5. 阅读之web应用安全
  6. iTerm2的使用技巧及快捷键
  7. 虚拟机下安装vmtool
  8. 爱上MVC~业务层刻意抛出异常,全局异常的捕获它并按格式返回
  9. MATLAB学习笔记(十)
  10. OBS---环境配置之#include D3DX10.h报错
  11. 使用不同的膨胀和腐蚀方法对图像进行处理
  12. Apache Spark技术实战之7 -- CassandraRDD高并发数据读取实现剖析
  13. 拓端tecdat|在R语言中使用概率分布:dnorm,pnorm,qnorm和rnorm
  14. 在线下单系统php源码,PIMS在线订单管理系统v4.2.9
  15. java源代码反编译_XJad(Java源程序反编译软件)
  16. 江苏省无锡市高二计算机小高考,江苏新高考高二还要考小高考吗?江苏新高考高中怎么分科?...
  17. 硬件蓝牙测试软件,【原创】聊聊蓝牙测试专用硬件工具-Ubertooth
  18. 创新式开发探索(三) —— 反思自己的开发活动
  19. 网络与信息安全-第三章-对称秘钥加密算法
  20. 管理员已阻止你运行此应用。有关详细信息,请与管理员联系。windows10

热门文章

  1. spring随笔(二) AOP
  2. 三天打鱼两天晒网python程序设计_Python经常会遇到三天的笔试题:钓鱼和两天的晒网:,之,三天打鱼,两天晒网...
  3. Mysql数据库设计规范之三数据库SQL开发规范
  4. 工程师软技能3:如何学习
  5. golang 的枚举
  6. golang 三种接口的定义方式
  7. css选择指定class的元素
  8. 总结一下适合自己的看书方式
  9. 看面试题感觉生疏的知识点
  10. java.lang.IllegalStateException: closed