标签 GopherCon 下的文章

Go语言很无聊…其实它妙不可言![译]

img{512x368}

无聊是一种很奇妙的状态,它可以稀释掉人类的一切情感。- 《古董局中局》马伯庸

GopherCon 2020技术大会上(线上虚拟大会),Jon Bodner为全球gopher们做了主题为“Go Is Boring”的精彩演讲(关注公众号iamtonybai,发送gophercon2020即可得到GopherCon 2020技术大会幻灯片资料)。

img{512x368}

其实早在2020年6月,Jon Bodner就发表过类似主题的文章《Go is Boring…And That’s Fantastic!》。其副标题为:深入探究世界为何依赖简单,可靠且易于理解的技术。本文将在这篇文章的基础上,结合演讲内容做综合翻译与整理,为大家呈现Jon Bodner这个资深程序员对Go语言哲学的理解。

1. 大多编程语言都在堆砌新功能特性

我从事专业软件工程师已有将近23年的时间,而我编写程序的时间也已有38年了。在这个过程中,我使用过很多编程语言。我喜欢编程语言,并且了解它们的新功能特性以及与之前的语言相比所进行的改动。

img{512x368}

如果看一下过去十年的编程语言,您会发现很多变化。C++,Java,Python和JavaScript增加了许多新功能,而一些新编程语言,诸如Rust和Swift等自诞生以来也发生了显著的变化。这一切都非常令人兴奋,但同时也会让你产生一种感觉:有时候,您永远无法跟上这些语言的所有想法。

img{512x368}

图:C到C++,再到更复杂的C++

img{512x368}

图:Java到Java2,再到更复杂的Java3?

JavaScript、Python、Rust、Swift、… …

2. Go没有这么多功能特性

接下来轮到Go了!考量Go的最好方法是思考它没有的功能特性:

img{512x368}

  • Go没有虚拟机或基于LLVM的编译器;
  • Go没有异常(exception);
  • Go没有用户定义的实现继承;
  • Go不支持重载函数、方法或运算符;
  • Go没有不变量;
  • Go没有枚举;
  • Go没有泛型
  • 自2012年Go 1.0发布以来,Go并未添加任何主要功能特性。

Go令人兴奋的一件事是通过goroutine,channel和select原生支持并发。但是,它基于CSP的思想,即Communicating Sequential Processes, 要知道,这可是一个早在1978年就被提出的思想。

这听起来不像是21世纪的编程语言,对吗?

然而,根据Stack Overflow的说法,Go是第三名程序员最想要学习的语言,而且(也许并非巧合)也是第三名最高薪的语言。硅谷的每个创业公司都在使用Go来构建其基础架构。Go语言编写了Docker,Kubernetes,etcd,Terraform,Vault,Consul,Traefik和许多其他前沿项目。那么问题来了?为什么每个人都对这种无聊的语言感兴趣呢?

3. 为什么每个人都对这种无聊的语言感兴趣呢?

在回答这个问题之前,让我们先退一步。

img{512x368}

这是希腊Argolis的Arkadiko桥,它是世界上最古老的桥梁,至今已有3000多年的历史。令人惊讶的是,它仍在使用中。

现在,我们为什么要关心一座古老的桥呢?这是因为软件开发有一个普遍的、但软件工程师们却不喜欢过多谈论的真理:

我们真的不擅长编写软件

我指的不仅仅是办公室里的那个人,你的经理在紧要关头派他去减少bug的数量。我指的是每个人–我,你,还有你能想到的所有著名的开发者。

但那些设计和建造桥梁的人,他们很擅长建桥。桥梁能按时、按预算建成,并能持续服务几十、几百、甚至几千年。造桥,如果你仔细想想,还真有点厉害。而桥梁是这样一种常见的现象,它们也是非常无聊的。当一座桥正常工作的时候,没有人惊奇,而当软件正常工作的时候,大家都有点惊奇。

不幸的是,这个世界非常依赖软件。它对软件的依赖甚至可能比对桥梁的依赖更甚。所以,我们必须以比造桥更快的速度更好地编写软件。

4. 这些年我们对编写软件的了解

在过去的60年中,我们在编写程序方面已经学到了一些东西,其中有很多普遍的共识:

img{512x368}

  • 早发现问题比晚发现问题要好。
  • 人们在管理程序的内存方面很糟糕。
  • 代码评审有助于发现bug。
  • 在任何一个超过一个人的项目中,沟通成本占主导地位。

5. 硬件也不能拯救我们

我们可以把这几件我们知道的事情和另一个已经确定下来的事实结合起来:电脑的速度不再快了。至少不像以前那样了。在20世纪80年代和90年代,CPU每1-2年就会快一倍。但现在情况变了。

img{512x368}

当你看单核性能时,2019年最快的酷睿i9的速度不到2011年最快的酷睿i7的两倍。我们没有变得更快,而是给CPU增加了更多的核心。当你看多核性能时,它更好一些,略微快了2倍多。

限制我们的不仅仅是CPU性能。Forrest Smith写了一篇关于RAM和RAM访问模式对性能影响的精彩博文。其要点如下:

  • RAM比CPU要慢得多,而且差距并没有得到改善,尽管CPU的速度并没有变快多少。

img{512x368}

  • RAM可能是随机访问,但如果你真的这样使用,它的速度很慢。在现代英特尔CPU上,如果数据是顺序的,你可以每秒从RAM中读取40千兆字节左右。如果你进行随机读取,每秒不到半GB。

img{512x368}

  • 有很多指针的代码特别慢。引用Forrest的话。“按顺序将指针后面的值相加的速度低于1GB/秒。随机访问,两次错过缓存,运行速度只有0.1 GB/s。指针追逐的速度要慢10到20倍”。

img{512x368}

6. 无聊带来新的惊喜,我们再来看看Go

鉴于我们知道的这些关于如何构建软件的几个宝贵的东西和我们现有的硬件状况,我们再来重新审视一下Go语言。

1) Go和软件

  • 尽早发现问题

Go语言可能缺乏功能特性,但它却有一套很棒的工具。Go的编译器速度很快,这种快速的编译速度被Go团队认为是一个特点。它可以让你快速查看你的代码是否能编译,如果不能,它可以让你看到问题所在。测试被内置在标准库中,以鼓励开发者测试他们的代码并发现问题。基准测试(benchmark)剖析(profiling)和竞态检查(-race)也是开箱即用的。很少有语言能提供这些工具,它们能让你更容易快速地发现问题。

  • 内存管理

众所周知,Go有一个垃圾收集器。你不用担心跟踪内存,这是一件很奇妙的事情。在编译语言中,垃圾回收是很罕见的。Rust的borrow checker是获得高性能和内存管理的一个迷人的方法,但它实际上把开发者变成了垃圾收集器,这可能很难正确使用;如果你犯了错误,忘记将一些引用声明为弱引用,Swift的ARC仍然会泄漏内存。现在,Go的GC的性能不如这些半自动系统,有些情况下,你需要额外的速度,但在大多数情况下,它肯定是足够的。

  • 代码评审

如果代码评审做得好,代码评审就很重要。为了进行有效的代码评审,你需要确保评审人员专注于正确的事情。低质量的代码评审会把时间花在格式化等事情上。Go在这里提供了很大帮助,因为在评审Go代码时没有有关代码格式的争论,因为所有的Go代码都是按照go fmt的标准代码格式进行格式化。

而代码评审是一个双向的过程。如果你想评审的效果好,你需要确保其他人能够理解你的代码。Go程序应该是简单的,使用一些很好理解的结构,这些结构自语言发布以来就没有改变过。因为没有异常(exception),没有面向方面的编程(AOP),没有继承和方法重写(override),也没有重载(overloading),所以很清楚什么代码在调用什么,在哪里返回值。如果你在Go中减少包级变量的使用,那就很容易看到数据到底是如何被修改的。由于Go的变化很小,你可以避免熔岩流反模式,你可以根据代码中使用的语法特性被引入到Go中的时间点来判断它到底有多老。

  • 沟通成本

Go是如何帮助解决这个问题的呢?我们已经讨论过Go的简单性、稳定性和标准格式化如何让你更容易地传达你的代码正在做什么。虽然这只是其中的一部分,但还有其他的东西。Go的隐式接口帮助团队编写解耦的代码。它们由调用代码定义,以准确描述需要什么功能,这就明确了你的代码在做什么。

2) Go和硬件

让Go成为编译语言的决定得到了回报。当CPU每天都在变快时,在虚拟机(译注:这里所谓的虚拟机是指动态语言的解释器或像jvm之类的字节码运行程序)中运行的解释语言似乎是个好主意。如果你的程序不够快,只要再等一年就可以了。但现在这已经行不通了。编译成原生代码比最新的虚拟机技巧少了很多乐趣,但它能带来很大的性能优势。

让我们用The Benchmark Game的微基准来比较Go与一些在虚拟机中运行的语言的性能。首先我们来看看Python和Ruby与Go的比较。任何小于100%的百分比都意味着比Go快,大于100%意味着慢:

img{512x368}

这里有很多红色(意味着比Go慢的测试)。有一个基准测试是Python更快 (奇怪的是,它不仅是Go的两倍,而且在这个测试中比其他所有语言都快),而Ruby则没有一个测试比Go快。除了那一个情况,这两种语言产生的代码都比Go慢了17%到60多倍。

现在让我们再看看Java和JavaScript与Go的比较:

img{512x368}

这两门语言与Go的性能更为接近。JavaScript在一个基准上比Go快,在其他基准上比Go慢,但JavaScript最坏的情况是比Go慢了三倍左右。

Java和Go的性能相当接近。Java在四种情况下比Go快,在两种情况下差不多,在四种情况下比Go慢。Go做的最差的情况是比Java慢三倍左右,Go做的最好的情况是比Java快50%左右。

我们看到的是,唯一能跟上Go的虚拟机是Java的。Hotspot是令人惊异的技术,但你需要一个世界上最好的工程软件,才能与一个优先考虑编译速度而非优化的编译器达到平衡,这说明了一些问题。而且你要为这种惊人的技术付出代价。Java应用程序的内存使用量要比Go应用程序大出很多很多倍。

还有第二个优势。垃圾收集器管理的垃圾都是不使用的指针。与隐藏指针的语言不同,Go给了你控制权。它让你避开指针,并以一种允许快速访问RAM的方式布局你的数据结构。这也让Go可以使用更简单的垃圾收集器,因为Go程序只是简单地制造更少的垃圾。枯燥无味的工作就是少了。

而我们都知道,CPU正在用更多的内核来弥补速度提升的不足。所以,使用一种能够利用这一点的语言是很好的。这就是Go内置并发支持的目的。有了对并发的语言级支持和一个在多个线程中调度goroutine的运行时库,意味着当你有多个CPU核时,这些线程可以被自然地映射到这些核上。

7. 我不想要我没有得到的那些功能特性

我们已经看到,Go专注于我们所知道的使创建软件更容易、更适合现代计算机的内存和CPU架构的功能和工具。但是其他语言有而Go没有的功能特性呢?也许Go的开发者错过了,那些Go没有的特性能帮助开发者写出了更少错误、更容易维护的代码?好吧,研究人员的研究结果告诉我们,事实并非如此。

2017年一篇名为《Github中编程语言与代码质量的大规模研究》的论文,该论文研究了17种语言的729个项目、8000万行代码、2.9万名作者、150万次提交,并试图回答这个问题:编程语言对软件质量的影响是什么?他们的答案是,差别不大。

“值得注意的是,这些因语言设计而产生的微弱影响,绝大多数是由项目规模、团队规模和提交规模等过程因素主导的。”

另一组研究人员对这些数据进行了第二次研究,并在2019年做了一项名为“关于编程语言对代码质量的影响”的论文。他们的发现更令人惊讶:

“根据手头的数据,不仅无法建立编程语言和代码质量之间的因果关系,甚至它们之间的相关性也被证明是值得怀疑的。”

如果编程语言的选择并不重要,那为什么要选择Go?这些研究表明的是,流程很重要。工具、测试、性能和长期维护的便利性比时髦的功能特性更重要。如果使用得当,Go内置的工具支持更好的流程,同时提供久经考验的功能特性。

这并不是说新功能不好。在过去的几个世纪和几千年里,桥梁建设技术当然在不断进步。但是,你想成为第一个走过一座用全新的理念和未经测试的技术建造的桥梁吗?你会想等一下,让人们测试一下再采用。

软件也是如此。如果我们要建立像桥梁一样可靠的软件基础架构,我们就需要使用像物理基础架构一样经过充分测试和理解的软件技术。这就是为什么Go主要使用20世纪70年代设计的功能特性,我们知道它们是有效的。

Go很无聊….其实它妙不可言。让我们都来用它来构建明天的精彩应用吧。

img{512x368}


“Gopher部落”知识星球开球了!高品质首发Go技术文章,“三天”首发阅读权,每年两期Go语言发展现状分析,每天提前1小时阅读到新鲜的Gopher日报,网课、技术专栏、图书内容前瞻,六小时内必答保证等满足你关于Go语言生态的所有需求!星球首开,福利自然是少不了的!2020年年底之前,8.8折(很吉利吧^_^)加入星球,下方图片扫起来吧!

Go技术专栏“改善Go语⾔编程质量的50个有效实践”正在慕课网火热热销中!本专栏主要满足广大gopher关于Go语言进阶的需求,围绕如何写出地道且高质量Go代码给出50条有效实践建议,上线后收到一致好评!欢迎大家订阅!

我的网课“Kubernetes实战:高可用集群搭建、配置、运维与应用”在慕课网热卖中,欢迎小伙伴们订阅学习!

img{512x368}

我爱发短信:企业级短信平台定制开发专家 https://tonybai.com/。smspush : 可部署在企业内部的定制化短信平台,三网覆盖,不惧大并发接入,可定制扩展; 短信内容你来定,不再受约束, 接口丰富,支持长短信,签名可选。2020年4月8日,中国三大电信运营商联合发布《5G消息白皮书》,51短信平台也会全新升级到“51商用消息平台”,全面支持5G RCS消息。

著名云主机服务厂商DigitalOcean发布最新的主机计划,入门级Droplet配置升级为:1 core CPU、1G内存、25G高速SSD,价格5$/月。有使用DigitalOcean需求的朋友,可以打开这个链接地址:https://m.do.co/c/bff6eed92687 开启你的DO主机之路。

Gopher Daily(Gopher每日新闻)归档仓库 – https://github.com/bigwhite/gopherdaily

我的联系方式:

  • 微博:https://weibo.com/bigwhite20xx
  • 微信公众号:iamtonybai
  • 博客:tonybai.com
  • github: https://github.com/bigwhite
  • “Gopher部落”知识星球:https://public.zsxq.com/groups/51284458844544

微信赞赏:
img{512x368}

商务合作方式:撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。

2020年Go语言盘点:新冠大流行阻挡不了Go演进的步伐

img{512x368}

2020,这一六十年一遇的庚子年的确“名不虚传”。在这一年发生了很多事,而最受瞩目的事情莫过于新冠疫情的全球大流行。疫情给全球的经济带来了近似毁灭性的打击,给人们的生命带来了极大威胁,给人们的生活也带来了很大痛苦及不确定性。好在这个糟糕的2020年马上就要过去了!相信此时此刻每个人心中都会有一句呐喊:“2020,快滚吧!”。

然而肆虐的新冠疫情并没有阻挡住Go语言前进的坚实步伐。在这艰难的一年中,在Go核心开发团队和Go社区的齐心协力下,Go同样取得了不俗的成绩,甚至在2020年3月(那时Go 1.14版本刚刚发布不到一个月),Go在TIOBE的编程语言排行榜中还一度挤进前十(而2019年同期,Go仅位列18位):

img{512x368}

这恰说明Go语言的开发与推广工作得到了更多来自全球的开发者的认可。在这篇文章中,我们就来做一下2020年Go语言的盘点,看看在2020年围绕Go语言、Go社区和Go生态圈都发生了哪些有影响和有意义的事情。

1. 面对大流行,Go核心团队给出“定心丸”

大流行始于2020年1月的武汉,但真正的全球大流行则大致始于2020年3月。面对新冠全球大流行,Go核心开发团队于3月25日作出反应,在官博发表文章《Go, the Go Community, and the Pandemic》,迅速调整了Go语言2020年的演进计划,给出了大流行期间的工作原则:

  • Go始终排在诸如个人和家庭健康与安全之类的基本问题之后;
  • 调整全年Go技术会议的计划,推迟或改为线上举办虚拟技术大会,为全球Gopher提供获取这些会议最新信息的渠道服务;
  • 为在线培训师、Go职位发布提供便利服务;
  • 为新冠病毒提供帮助工作台:https://covid-oss-help.org/;
  • 调整Go工作计划,缩减Go 1.15中包含的新特性和改进,但会遵循Go 1.15的发布时间表;重点支持gopls、pkg.go.dev的演进和优化。

Go核心开发团队的这份声明虽然简短,但却给Go社区吃了一颗“定心丸”,为Go语言在2020新冠大流行年中的稳步演进确定了节奏,指明了方向,奠定了基础。

2. Go在2020年值得关注的那些变化

2020一年,Go核心开发团队、社区和生态圈做了很多工作,但这里无法一一枚举,仅挑出一些重要的变化列在这里:

  • 2020年2月26日,Go 1.14版本发布。主要的变动点包括:

    • 嵌入接口的方法集可重叠;
    • 基于系统信号机制实现了异步抢占式的goroutine调度;
    • defer性能得以继续优化,理论上有30%的性能提升;
    • go module已经生产就绪,并支持subversion源码仓库;
    • 重新实现了运行时的timer;
    • testing包的T和B类型都增加了自己的Cleanup方法。
  • 2020年4月20日,发布2019年Go开发者调查结果

    • 参与2019开发者调查的gopher数量几乎为2018年的2倍,达到10,975人;
    • 大多数受访者每天都在使用Go,而且这个数字每年都有上升的趋势;
    • Go的使用仍然集中在科技公司,但Go越来越多地出现在更广泛的行业中,如金融和媒体;
    • 调查的大部分指标的同比值都很稳定;
    • 受访者正在使用Go来解决类似的问题,特别是构建API/RPC服务和CLI,和他们工作的组织规模大小关系不大;
    • 大多数团队试图快速更新到最新的Go版本;当第三方供应商迟迟不支持当前的Go版本时,就会给开发者造成采用障碍;
    • 现在Go生态系统中几乎所有人都在使用go module,但围绕包管理的一些混乱仍然存在;
    • 需要改进的高优先级领域包括调试、go module使用以及与云服务交互的体验改善;
    • VS Code和GoLand的使用量持续增加;现在每4个受访者中就有3个首选它们。
  • 2020年6月,vscode-go扩展(vscode上的go标准插件)将主代码库从github.com/microsoft/vscode-go迁移到github.com/golang/vscode-go,成为Go官方项目的一部分。

  • 同在2020年6月,pkg.go.dev网站开源!该网站是Go团队在Go社区建设方面做出的主要工作,开源后的pkg.go.dev将接收更多来自社区的想法和改进意见,比如:11月,pkg.go.dev就发布了新版页面设计原godoc.org的请求也被重定向到pkg.go.dev(广大gopher可能需要一段时间来适应这种改变)。

  • 2020年8月,Go 1.15版本发布,其主要的变动点包括:

    • GOPROXY新增以管道符为分隔符的代理列表值;
    • module cache的存储路径可设置;
    • 改善派生自原生类型的自定义类型变量在panic时的输出形式;
    • 将小整数([0,255])转换为interface类型值时将不会额外分配内存;
    • 加入更现代化的链接器(linker),新链接器的性能要提高20%,内存占用减少30%;
    • 增加tzdata包。
  • 2020年11月初,全球最具影响力的Go语言技术大会GopherCon 2020在线上举行!Austin Clements详细讲解了Go 1.14加入的基于系统信号的抢占式调度器;Go语言之父之一的Robert Griesemer讲解了Go泛型当前的状态以及未来的计划。会后Russ Cox确认了Go团队将在Go 1.18版本中加入Go泛型(类型参数)作为试验特性;

  • 2020年11月10日,Russ Cox代表Go核心开发团队发文庆祝Go语言发布11周年,在文中他回顾了Go这一年来的收获以及对2021年Go 1.16和Go 1.17的展望。文中他还提到了GOPATH的历史使命即将结束,Go将开启全面module-aware模式的Go工具链时代!(下图来自推特):

img{512x368}

  • 2020年12月中旬,Go 1.16beta1发布。在Go 1.16中,Go将原生提供对Apple M1芯片(darwin/arm64)的支持;同时,在Go 1.16中go module将成为默认包依赖管理机制;Go 1.16还提供了支持在Go二进制文件中嵌入静态文件的官方原生方案,支持对init函数的执行时间和内存消耗的跟踪,链接器性能得到进一步优化等。

  • 2020年12月16日,gopls v0.6.0发布。同期,vscode-go也正计划将gopls作为默认语言服务器

3. Go语言当前的状态:已来到“稳定爬升的光明期”

今年笔者在知乎上滞留的时间比往年要长一些,看到很多人问与Go相关的一些问题,大致都是询问有关Go语言前景的,比如:

无论上述问题的题目有何不同,其本质的疑问都是“Go语言前景/钱景如何,值不值得投入去学习?”。那么是否存在一种成熟的方法能相对客观地描会出Go语言的发展态势并能对未来Go的走势做出指导呢?我想Gartner的技术成熟度曲线(The Hype Cycle)或许可以一试。

我们知道Gartner的技术成熟度曲线又叫技术循环曲线,是企业用来评估新科技是否要采用或采用时机的一种可视化方法,它利用时间轴与该技术在市面上的可见度(媒体曝光度)决定要不要采用以及何时该种新科技,下面就是一条典型的技术成熟度曲线的形状:

img{512x368}

同理,将该技术成熟度曲线应用于某种编程语言,比如Go,我们就可以用它来判断该编程语言所处的成熟阶段以辅助决定要不要采用以及何时采用该门语言。我们从知名的TIOBE编程语言指数排行榜获取Go从2009年开源以来至今的指数曲线图,并且根据Go版本发布史在图中标记出了各个时段的Go发布版本:

img{512x368}

对比上面的Gartner成熟度曲线,相信你肯定有所发现。我们共同来解释一下:

  • Go语言从2009年宣布开源以来,经历了两次“高峰”:一次是2009年刚刚宣布开源后,一次是在Go1.7~Go 1.9期间。显然,第一次的高峰实际上是一个“假高峰”,那时的Go连1.0版本都尚未发布,我们完全可以将其“剔除”掉。
  • 从图中来看,Go语言的技术萌芽期是比较长的,从2012年的Go 1.0一直持续到2015年的Go 1.5
  • Go 1.5版本的自举以及Go垃圾回收延迟的大幅下降“引爆”了Go的“媒体曝光度”,Go技术的“期望膨胀期”开始,经历从Go 1.6Go 1.9版本的发布后,业界对Go的期望达到了峰值;
  • 从Go 1.10开始,Go似乎变得“仿徨”起来,原本期望Go“一统天下”的愿望没能实现,全面出击失败后,期望的落空导致了人们对Go产生了“功能孱弱劣势”的印象,于是Go在Go 1.11发布前跌到了“泡沫破裂”的谷底;
  • Go 1.11引入了Go module,给社区解决Go包依赖问题打了一剂强心剂,于是Go又开始了缓慢的爬升;
  • 从TIOBE提供的曲线来看,Go 1.12Go 1.15版本的发布让我们有信心认为Go已经进入了“稳步爬升的光明期”。

到此,我相信知乎上的很多问题都应该迎刃而解了,剩下的只是如何学习Go的细节如何Go进阶了。

不过可能还有很多朋友会问,Go何时能达到实质生产高峰期呢?这个问题真不好回答。但进入了“稳步爬升的光明期”后的Go到达实质生产高峰期只是一个时间问题了,也许2022年初发布的支持Go泛型特性的Go 1.18版本会快速推动Go向更高阶段进发!

4. 展望Go的2021:继续蓄力,迎接下一个“引爆点”

促使Go回到“稳步爬升光明期”的go module机制将在2021年年初正式发布的Go 1.16中成为默认包依赖管理机制。而Go 1.16版本也已经处于特性冻结并发布了beta1版本的阶段,其更多特性可以参考我的“Go 1.16新功能特性不完全前瞻”一文。

将于2021年八月发布的Go 1.17的里程碑已经建立, 从里程碑的内容来看,已基本确定加入的功能特性和改进包括:

当然Go 1.17还会持续优化链接器,更多功能特性和改进还待Go团队策划补充。

而万众期待的Go泛型依然会继续打磨,从2016年Ian Lance Taylor提出“Go should have generics”的设计草案以来,Go泛型草案至今已经讨论了4年多了,这再次证明了Go团队对于这类会显著增加Go复杂性的特性是多么地“慎之又慎”。虽然Go团队初步确定了在Go 1.18版本中将Go泛型(类型参数)落地,但近期Go项目中关于Go泛型的主issue:proposal: spec: generic programming facilities中仍然有不少反对的声音。Go团队在“继续保持Go简单”的道路上真是任重道远啊!

总之,2021年,Go将继续稳步爬升,也许爬的并没有那么快,但在我看来,这是在积蓄力量,等待着下一个引爆点。

5. 小结

Go在新冠疫情大流行的历史时期依旧步行稳健,为下一个“引爆点”积极蓄力。Go在自己传统领域依旧存在明显优势,比如:企业级应用、基础设施、中间件、微服务API、命令行应用等,并且在这些领域取得了越来越多开发者的青睐。

Go在其他领域也有“意外收获”,比如:在黑客工具领域,Go已经逐渐威胁着Python的龙头地位了,显然语法简单原生并发自带“电池”、轻松跨平台的编译以及编译为独立二进制文件的Go与黑客的需求十分契合。不过,在安全领域成为了进攻“武器”,这想必是Go设计者们所意料不到的。

6. 福利!2020年本博客最受欢迎Go相关文章TOP10


Gopher部落知识星球已正式转正了!高品质首发Go技术文章,“三天”首发阅读权,每年两期Go语言发展现状分析,每天提前1小时阅读到新鲜的Gopher日报,网课、技术专栏、图书内容前瞻,六小时内必答保证等满足你关于Go语言生态的所有需求!星球首开,福利自然是少不了的!2020年年底之前,8.8折加入星球,下方图片扫起来吧,先到先得哦!

Go技术专栏“改善Go语⾔编程质量的50个有效实践”正在慕课网火热热销中!本专栏主要满足广大gopher关于Go语言进阶的需求,围绕如何写出地道且高质量Go代码给出50条有效实践建议,上线后收到一致好评!欢迎大家订阅!

我的网课“Kubernetes实战:高可用集群搭建、配置、运维与应用”在慕课网热卖中,欢迎小伙伴们订阅学习!

img{512x368}

我爱发短信:企业级短信平台定制开发专家 https://tonybai.com/
smspush : 可部署在企业内部的定制化短信平台,三网覆盖,不惧大并发接入,可定制扩展; 短信内容你来定,不再受约束, 接口丰富,支持长短信,签名可选。

2020年4月8日,中国三大电信运营商联合发布《5G消息白皮书》,51短信平台也会全新升级到“51商用消息平台”,全面支持5G RCS消息。

著名云主机服务厂商DigitalOcean发布最新的主机计划,入门级Droplet配置升级为:1 core CPU、1G内存、25G高速SSD,价格5$/月。有使用DigitalOcean需求的朋友,可以打开这个链接地址:https://m.do.co/c/bff6eed92687 开启你的DO主机之路。

Gopher Daily(Gopher每日新闻)归档仓库 – https://github.com/bigwhite/gopherdaily

我的联系方式:

  • 微博:https://weibo.com/bigwhite20xx
  • 微信公众号:iamtonybai
  • 博客:tonybai.com
  • github: https://github.com/bigwhite
  • “Gopher部落”知识星球:https://public.zsxq.com/groups/51284458844544

微信赞赏:
img{512x368}

商务合作方式:撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。

如发现本站页面被黑,比如:挂载广告、挖矿等恶意代码,请朋友们及时联系我。十分感谢! Go语言第一课 Go语言精进之路1 Go语言精进之路2 Go语言编程指南
商务合作请联系bigwhite.cn AT aliyun.com

欢迎使用邮件订阅我的博客

输入邮箱订阅本站,只要有新文章发布,就会第一时间发送邮件通知你哦!

这里是 Tony Bai的个人Blog,欢迎访问、订阅和留言! 订阅Feed请点击上面图片

如果您觉得这里的文章对您有帮助,请扫描上方二维码进行捐赠 ,加油后的Tony Bai将会为您呈现更多精彩的文章,谢谢!

如果您希望通过微信捐赠,请用微信客户端扫描下方赞赏码:

如果您希望通过比特币或以太币捐赠,可以扫描下方二维码:

比特币:

以太币:

如果您喜欢通过微信浏览本站内容,可以扫描下方二维码,订阅本站官方微信订阅号“iamtonybai”;点击二维码,可直达本人官方微博主页^_^:
本站Powered by Digital Ocean VPS。
选择Digital Ocean VPS主机,即可获得10美元现金充值,可 免费使用两个月哟! 著名主机提供商Linode 10$优惠码:linode10,在 这里注册即可免费获 得。阿里云推荐码: 1WFZ0V立享9折!


View Tony Bai's profile on LinkedIn
DigitalOcean Referral Badge

文章

评论

  • 正在加载...

分类

标签

归档



View My Stats