官宣:Go专栏“改善Go语言编程质量的50个有效实践”上线了

断断续续写了一年多的Go专栏:《改善Go语言编程质量的50个有效实践》今天终于正式上线了!- https://www.imooc.com/read/87

img{512x368}

慕课专栏:《改善Go语言编程质量的50个有效实践》

Go语言是Google大牛团队(Robert Griesemer、Rob Pike以及Ken Thompson)设计的一种静态类型、编译型编程语言,支持垃圾回收和轻量级并发,它于2009年11月诞生,一面世就以语法简单、原生支持并发、标准库强大、工具链丰富等优点吸引了大量开发者。经过10余年演化和发展,Go如今已成为云基础架构的标准编程语言,很多云原生时代的杀手级平台、中间件、协议和应用都是采用Go语言开发的,比如:DockerKubernetes以太坊Hyperledger Fabric超级账本、新一代互联网基础设施协议ipfs等。

Go是一门特别容易入门的编程语言,无论是刚出校门的新手还是从其他编程语言转过来的成手,都可以在短时间内快速掌握Go语法并投入到Go代码的编写中。但笔者在日常收到很多Go初学者的疑问:Go入门容易,但进阶难,怎么才能像Go团队那样写出符合Go思维和语言惯例(idiomatic)的高质量代码呢?

这个问题也引发了我的思考。在2017年GopherChina大会上笔者以演讲的形式初次尝试回答这个问题,但鉴于演讲的时长有限,很多内容难于展开,效果不甚理想。而这个慕课网专栏则是我对解答这个问题作出的第二次尝试。

这次解答的思路有两个:

  • 思维层面:写出高质量Go代码的前提是思维方式的进阶,即使用Go语言的思维去写Go代码
  • 实践技巧层面:Go标准库、优秀Go开源库是一个挖倔高质量、符合Go惯用法的Go代码的宝库,对其进行阅读、挖掘和整理归纳,我们可以得到一些帮助我们快速进阶的有效实践

本专栏正是基于上面思路为想实现Go进阶但又不知从何入手的你而设的

首届图灵奖得主、著名计算机科学家艾伦·佩利(Alan J. Perlis)曾经说过:“不能影响到你的编程思维方式的编程语言不值得去学习和使用”,足见编程思维对编程语言学习和应用的重要性。只有真正领悟了一门编程语言的设计哲学和编程思维,并将其应用到日常编程当中去,你才算是真正地实现了在这门编程语言上的进阶。

因此,本专栏首先将带领大家回顾Go语言的演化历史,一起了解并深刻体会Go大牛们在设计Go语言时的所思所想,与大牛们实现思维上的共鸣,理清那些看似随意的,实则经过深思熟虑的设计的背后的付出。

接下来,本专栏将基于笔者对Go核心团队、Go社区高质量代码的分析归纳,从代码风格、基础语法、函数/方法、接口、并发、错误处理、测试调试、标准库、工程实践等多个方面给出改善Go代码质量,写出符合Go思维和惯例的代码的有效实践。

学习了本专栏的这50条有效实践,你将拥有和Go大牛们一样Go编程思维,写出符合Go惯例风格的高质量Go代码,从众多Go入门选手中脱颖而出,快速实现从Go编程新手到专家的转变!

本专栏共分10个模块(篇),50个小节。

  • 模块1:设计哲学篇

本专栏的开篇和总起。和读者一起穿越时空,回顾历史,详细了解Go语言的诞生、演化以及今天的发展。归纳总结Go语言的设计哲学和原生编程思维,让读者可以站在语言设计者的高度理解Go语言与众不同的设计,在更高层次,形成共鸣,产生认同。只有强烈认同,才能更上一层楼。

  • 模块2:代码风格篇

每种编程语言都有自己惯用的代码风格,而遵循语言惯用风格是高质量Go代码的必要条件。本篇详细介绍了得到公认且广泛使用的Go工程的结构布局、代码风格标准、标识符命名惯例以及变量声明形式等。

  • 模块3:基础语法篇

本模块详述在基础语法层面高质量Go代码的惯用法和有效实践,涵盖无类型常量的作用、定义Go的“枚举常量”、“零值可用”类型的意义、切片原理以及其高效的原因、Go包导入路径的真正含义等。

  • 模块4:函数与方法篇

函数和方法是Go程序的基本组成单元。本模块聚焦于函数与方法的设计与实现,涵盖init函数的使用、跻身“一等公民”行列的函数有何不同、Go方法的本质等帮助读者深入理解它们的内容。

  • 模块5:接口篇

接口是Go语言中的“魔法师”。本模块将聚焦接口,涵盖接口的设计惯例、使用接口类型的注意事项以及接口类型对代码可测试性的影响等。

  • 模块6:并发编程篇

Go以其轻量级的并发模型而闻名。本模块将详细介绍Go基本执行单元 – goroutine的调度原理、Go并发模型以及常见并发模式、Go支持并发的原生类型-channel的惯用使用模式等内容。

  • 模块7:错误处理篇

Go语言十分重视错误处理,它有着相对保守的设计和显式处理错误的惯例。本模块将涵盖Go错误处理的哲学以及在这套哲学下一些常见错误处理问题的优秀实践方案。

  • 模块8:测试与调试篇

Go自带强大且为人所称道的工具链,本模块将详细介绍Go在单元测试、性能测试以及代码调试方面的最佳实践方案。

  • 模块9:标准库篇

Go拥有功能强大且质量上乘的标准库,多数情况我们仅使用标准库所提供的功能而不借助第三方库就可实现应用的大部分功能,这大幅降低学习成本以及代码依赖的管理成本。本模块将详细说明高频使用的标准库包,如net/http、strings、bytes、time等的正确使用方式,以及reflect包、cgo在使用时的注意事项。

  • 模块10:工程实践篇

本模块将涵盖我们使用Go语言做软件项目过程中很大可能会遇到的一些工程问题的解决方法,包括:使用module进行Go包依赖管理、Go应用容器镜像、Go相关工具使用以及Go语言的避“坑”指南。

从上述专栏结构,我们也能看出本专栏并不是Go入门的最佳选择。如果非要给本专栏划定一个目标人群,或者说哪些读者阅读本专栏后会更多受益,我觉得是那些已经迈入Go语言世界、但迫切希望进一步提升层次、写出高质量Go代码的Go开发者。

很多朋友可能会问?你这个专栏有何与众不同之处?在专栏上线前编辑老师也让我编写课程亮点,我觉得下面这几句话可以概括专栏的特点:

  • 进阶必备 – 50个有效实践助你掌握高效Go程序设计之道;
  • 高屋建瓴 – Go设计哲学与编程思想先行;
  • 深入浅出 – 原理深入,例子简明,讲解透彻;
  • 图文并茂 – 大量图表辅助学习,重点难点轻松掌控;
  • 覆盖全面 – 覆盖高级面试知识点,求职更自信。

本专栏第一次落笔大约在Go 1.12发布后,大约将在今年10月份,即在Go 1.15发布后的第二个月完成。这中间有一定的跨度,因此专栏内的有些内容在各个Go版本间可能会有差异。笔者在内容中已经尽量做了版本适用标识,但难免有疏漏。各位读者在遇到问题时,可以及时反馈给我。

此外,Go语言还在飞速发展,一些当前的惯用表达方式或有效实践可能在日后因语言引入新的特性(比如:Go泛型)而“过时”。我会在我的博客上持续关注Go语言的演化,并将最新的Go高效编程实践分享给大家。

最后再来一次自我介绍:Tony Bai,Go语言技术专家和鼓吹者,GopherChina大会讲师,Go语言技术博客tonybai.com的作者,GopherDaily(Go日报)项目(github.com/bigwhite/gopherdaily)维护者,OSCHINA源创会技术讲师《七周七语言》译者之一,慕课网《Kubernetes实战:高可用集群搭建、配置、运维与应用》作者,开源拥趸

作为一名在国内接触Go语言较早(2012年)的Gopher和Go布道师,Tony Bai拥有丰富的Go开发知识和经验。他在个人博客上撰写了大量关于Go语言的文章,并深受Go社区欢迎。目前他正在国内一大型软件公司带领团队使用Go语言构建移动运营商的5G消息平台,这个平台将处理来自全国各地几十万个5G chatbot程序每天发送的几十亿条5G消息请求。

欢迎大家订阅我的专栏! 如有意见和建议,可在我本博文后面的评论中反馈。感谢大家支持。

专栏涉及的源码仓库地址:https://github.com/bigwhite/publication/tree/master/column/imooc/go-50tips/sources


我的Go技术专栏:“改善Go语⾔编程质量的50个有效实践”上线了,欢迎大家订阅学习!

我的网课“Kubernetes实战:高可用集群搭建、配置、运维与应用”在慕课网上线了,感谢小伙伴们学习支持!

我爱发短信:企业级短信平台定制开发专家 https://51smspush.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

微信赞赏:
img{512x368}

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

vendor目录是否需要提交到代码库中?答案全在这一篇

img{512x368}

如果您还在使用vendor机制管理依赖包,那么说明您肯定是处于下面两种情况之一!

  • 还工作在传统的GOPATH模式下(使用Go 1.10及之前版本;或Go 1.11及之后版本,但GO111MODULE=off),利用vendor管理目标包的特定依赖;
  • 工作在go module模式下,但仍然利用vendor管理目标module的特定依赖并使用go build -mod=vendor来构建。

那么我们是否应该将项目中存储依赖包的vendor目录提交到源代码仓库进行管理呢?如果让笔者给出答案,那就是:应该

要想理解为什么“应该”,我们看看下面Go语言包依赖管理的演化过程就知道了。

Go语言在构建设计方面深受Google内部开发实践模型的影响。

img{512x368}

Google内部基于主干的开发模型:
– 所有开发人员基于主干trunk/mainline开发:提交到trunk或从trunk获取最新的代码(同步到本地workspace)
– 版本发布时,建立Release branch,release branch实质上就是某一个时刻主干代码的快照;
– 必须同步到release branch上的bug fix和增强改进代码也通常是先在主干上提交(commit),然后再cherry-pick到release branch上

Go最初的构建管理以及go get就采用了基于Google内部单一代码仓库(single monorepo)和基于主干(trunk/mainline based)的开发构建模型。具体逻辑是:在Go 1.5版本之前,go get获取的都是各个Go包所在仓库的trunk/mainline的最新代码。go get会将获取的最新代码放在\$GOPATH/src下面,而go build会在\$GOROOT/src和\$GOPATH/src下面按照包导入路径(import path)去搜索这些包并执行构建操作。

我们看到1.5版本之前Go编译器都是基于目标Go程序依赖包的trunk/mainline上的最新代码去编译的,这样的机制带来的问题是显而易见的,至少包括几点:

  • 因依赖包的trunk的变化,导致不同人获取和编译你的包/程序时得到的结果实质是不同的,即构建结果不能重现;
  • 因依赖包的trunk的变化,引入不兼容的实现,导致你的包/程序无法通过编译;
  • 因依赖包演进而无法通过编译,导致你的包/程序无法通过编译。

为了实现可重现的构建(reproduceable build),Go语言于1.5版本引入了vendor机制:即Go编译器会优先在vendor目录下搜索依赖的第三方包,这样如果开发者将特定版本的依赖包存放在vendor下面并提交到代码仓库,那么所有人理论上都会得到同样的编译结果,从而实现可重现的构建。

在Go 1.5发布后的若干年,Gopher们把注意力都集中在如何利用vendor解决包依赖问题,从手工添加依赖到vendor、手工更新依赖,到一众包依赖管理工具的诞生:比如: govendorglide以及当时号称准官方工具的dep,都在努力地尝试着按照当今主流思路解决着诸如:“钻石型依赖”等难题。

但Go核心开发团队没有走寻常路,而是另辟蹊径地在Go 1.11中引入了采用了最小版本选择(mvs)的go module。至此,Go的构建模式被一分为二:gopath mode和module-aware mode。在module-aware mode下,Go构建工具链默认不再使用传统GOPATH下或顶层vendor下面的包了,而是使用\$GOPATH/pkg/mod下面的第三方依赖Go module的local cache。理论上,go module真正实现了“可重复的构建”,我们无需再使用Go 1.5引入的vendor机制了。但社区的反馈让Go核心开发团队将module顶层目录下的vendor目录保留了下来,主要考虑vendor还能在下面场合“发光发热”:

  • 保持Go1兼容性

可继续支持Go 1.5以后,Go 1.10之前的Go版本编译Go 1.11后续版本的源码(仅限于:启用了module并带有vendor)。

  • 支持离线构建(offline build)

module/包构建所需的全部依赖都放入了vendor目录,这样即便在无网络连接的情况下,我们依然可以进行module的构建。这尤其适合企业内部执行CI/CD的那些可能没有外网访问权限的主机。

  • 提高构建性能,缩短CI/CD时间

在CI/CD时,由于每次都是重新构建,在module-aware模式(非vendor)下,每次都需要重新下载依赖的module到本地,这样十分耗时。而采用vendor方式则无需下载依赖module,提高了构建性能,缩短CI/CD的时间。

  • 解决“消失的包/module”的问题

一些module/包在经年岁月后可能被从github等托管站点删除了,这时我们如果依赖这些module/包,我们将遇到构建错误(Go Proxy的存在显然让这种可能行极大的降低了)。而使用vendor已经将包/module存放到了本地(以及自己的代码仓库中),可以解决“包/module消失”的问题。

  • 快速分发module的所有依赖包

vendor目录下存放了当面module的所有依赖包(及版本),易于打包并分发。尤其对一些无法通过go get获取到的依赖包/module,这尤为适用。

上述“演化简史”反复提到了“可重复构建”,这就是Go核心团队先后推出vendor、go module所基于的核心“痛点”。并且“可重复构建”不单单是个人行为,更多是一个“团队(可以扩展到整个Go社区)”行为:让团队所有人拿到同样的代码并构建出同样的成果物。这样来看,如果不将vendor提交到源码仓库,我们就无法实现这一目标

在将vendor提交到代码仓库过程中,你也许会抱怨依赖的代码包太多、依赖变化频繁的问题。但go module所使用的“最小版本选择”已经将依赖变动降低到不能再低的程度了,至少比采用主流“依赖管理”思路的其他语言,比如js,构建时面临的变动要少很多了。另外降低依赖的代码包的数量也是你自己的责任,Go是“自带电池”的编程语言,其标准库中有很多优秀的包可用,尽量使用标准库包以降低过多的“依赖”。

更多关于Go module和包依赖管理的内容,请查看技术专栏《改善Go语言编程质量的50个有效实践》


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

我的Go技术专栏:“改善Go语⾔编程质量的50个有效实践”上线了,欢迎大家订阅学习!

img{512x368}

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

img{512x368}

我爱发短信:企业级短信平台定制开发专家 https://51smspush.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是编程语言世界的“特斯拉”

img{512x368}

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

img{512x368}

本文翻译自《GO — The TESLA Of Programming World》 – https://medium.com/globant/go-the-tesla-of-programming-world-a3ad8584723e。内容有改编

免责声明:本文的内容仅用于娱乐和提供信息。我强烈建议读者不要基于这篇文章来进行专业领域的决策。这里表达的观点仅是作者本人的观点,绝不代表作者所属任何组织的观点,思想或意识形态。

缘起

img{512x368}

回味着晨起后的五谷豆浆在口中的余香,反思着二闺女四个月来的成长情况,一篇关于Go终于拥抱泛型的文章映入眼帘,紧接着就是3000多辆中国制造的出口欧洲的特斯拉Model 3汽车抵达比利时泽布吕赫港的消息。一个奇怪的想法油然而生并钻入了我的大脑:如果说Go和Tesla是通过“如何不陷入困境并对未来进行超前思考”而收到回报的新典范,那么保留了父母物种复杂的身体解剖结构的新生婴儿如何成长和发展自己的性格和态度呢。这就是让我感觉到Go确实是编程语言中的TESLA的原因和驱动力。

TESLA在汽车世界和Go在编程世界中的崛起和成长有着惊人的相似:

  • 两者的诞生都打破了他们各自领域中已约定俗成的做事方式的束缚,并提出了一种新的高效方法来完成相同的事情;
  • 两者都取得了惊人的成绩,并按照各自的增长计划前进,并似乎正在赢得这场战斗;
  • 两者已完成的和目标都是保留各自领域的优秀部分,并在硬性方面有所改进;
  • 两者都将成为各自领域帝国的未来。

开端

与普遍的看法相反,是通用汽车而不是特斯拉生产了世界上第一批量产的电动汽车,名为EV1。这辆车仅租赁而不出售,在生产了几年后,通用汽车召回了所有EV1汽车并销毁了它们!这促使马丁·埃伯哈德( Martin Eberhard)和马克·塔彭宁( Marc Tarpenning)启动TESLA(最初是TESLA汽车公司)来挑战大型汽车制造商,并引领世界进入零排放的出行方式。

在使用Go之前,Google的开发人员面临着编译时间,代码可维护性等问题,这些问题直接影响了生产力。另外,他们需要一种具有更好的并发支持的编程语言,以更好地利用多核处理器的特性。同时更易于学习,易于实现,编写更少的程序代码。Google当时主要使用C++,并且对代码中的任何问题或较小的修改都将花费一天多的时间。C++的另一个缺点与它的内存管理模型有关:内存的分配和释放不是动态的,并且如果程序员没处理好内存分配与释放事宜,就会导致内存泄露,导致应用程序运行变慢并最终崩溃。

在Go之前的时代,在项目开始时,需要选择要使用的编程语言:使用Python可简化操作,但也放弃了内存,CPU管理和可移植性;使用Java可利用其垃圾回收、自动内存管理和可移植性,但却以放弃简单为代价;选择其他诸如C++之类的语言则具有复杂的内存管理模型,并且没有内置的垃圾回收器。走进Go:一种简单易学的编程语言,由Rob Pike等设计的一种带有内置垃圾收集器(比Java中的垃圾收集器简单得多)的语言,支持静态编译并支持并发编程。

经过上面仔细剖析,可以注意到TESLA和Go的成立都是由于出现了机会。一个触发了他们各自的创造者开发出一种方法,试图解决各自领域中“当时”缺点的机会。

自持(自举)

电动汽车最重要的组件是电池,而对于编程语言来说,其最重要的组件则是被称为编译器的软件。TESLA的埃隆·马斯克(Elon Musk)最近宣布,他们将开发一种“tabless”电池,这将有助于为其车辆提供更好的续驶里程。重要消息,TESLA将自行生产这些电池。

为什么特斯拉一开始就没有自己的电池制造部门?没有具体的原因,但特斯拉优先考虑在汽车制造方面获得他们需要的专业知识,然后冒险为他们的汽车制定内部电池生产计划。

Go编译器是“语言实现自身”的一个典型案例。在Go 1.4版本之前,Go语言的编译器是用C编写的,后来被用Go编写的代码取代了

这样的自举变化提供了诸多好处,比如:可以更好地控制编译器,因为Go更简单,这使得调试编译器问题更快更容易。此外,Go还对单元测试和性能分析提供了出色的内置支持。

进一步阅读:对于你们当中好奇心重的人,在下面的资源链接中提供了一些资料,这些资料解释了对Go编译器进行更改的动机。https://docs.google.com/document/d/1P3BLR31VA8cvLJLfMibSuTdwTuF7WWLux71CYD0eeD8/edit

创新

在当今竞争激烈的世界中,创新一直是成功的关键所需。TESLA和Go都采用了颠覆性创新的方法。具有破坏性并不意味着新进入者必须挑战/修改/改变已经建立的完成任务方式的方方面面,而是在当前趋势下采取一种不同,更好,更简单,通常更有效的方式来完成任务。

根据维基百科,颠覆性创新是指一种创建新的市场和价值网络并最终破坏现有的市场和价值网络,取代当前已建立的市场的领先的公司,产品和联盟的创新。

TESLA通过几乎不存在的电动汽车制造提案进入了以燃油动力汽车为主的汽车制造市场。TESLA保留了久经考验的车辆空气动力学设计,但彻底改变了这些车辆自我推进的方式。自从他们的第一款汽车问世以来,大约12年之久,TESLA便将这场斗争推向了传统汽车制造商的家门口,而这些传统汽车制造商的生存受到了威胁,除非他们也通过创新。TESLA引领着交通的未来:零排放,可再生能源驱动的车辆。

Go是建立在现有编程语言,例如C,Pascal和Oberon的久经考验的优势之上的编程语言。摆在Go面前的最大、最复杂的难题就是:如何实现简单和最小化。C语言已经很简单,但是Go将简单性提高到了更高的水平。Go以其在学习和实现方面的简单性以及遵循一种简单的方法来实现复杂的编程概念(如并发性)而广受赞赏。最初,Go旨在解决Google的内部编程障碍。尽管技术进步意味着多核处理器从2006年开始成为标准,但没有一种编程语言可以充分利用这种处理能力,从而导致更快,更好的代码执行时间以及对运行代码的基础硬件和软件基础设施的有效利用。

颠覆性创新方法从Go如何处理某些编程范例得以反映出来。Go允许使用OOP样式的语法,但实际上它并不是面向对象的语言!与其他OO语言一样,它具有类型和方法,但是缺少类型层次结构。Go对继承概念的理解与JAVA等其他OO语言所追求的完全不同。与Java中需要两个关联类进行显式声明不同,Go根据某些合理的条件隐式计算类型关联关系。

尽管进入了已经很拥挤的编程语言世界,Go在短短的十二年间就引起了巨大轰动,可以说是最受喜爱,使用最多和增长最快的编程语言之一。根据当前的市场报告,Go威胁着编程语言中的巨擘Java,并且被广泛视为未来的(头部)编程语言。

成长

TESLA成立于2003年,当时不为人知。2008年,其首款产品发布,到2020年截至7月,TESLA已超越丰田,成为全球最具价值的汽车制造商。这就是创新的TESLA造成的破坏,它很可能取代APPLE成为全球市值最高的公司(按市值计算)。TESLA被公认为领先于其他汽车制造商至少十年的公司!

跨平台Go语言与Google自己的DART一起,是Github上增长最快的编程语言之一。截至2020年第三季度,它是GitHub上第四大最受欢迎的语言

根据2020年StackOverflow开发人员调查,它是StackOverflow上最受欢迎的语言第5名。Go的发展绝非偶然,也不是炒作,尤其是当您考虑到Docker,Kubernetes,Terraform之类的应用程序完全是用Go编写的。Go也是在职专业人员希望在2020年学习的编程语言之首。借助Go 2.0,Go有望成为企业软件开发的首选语言,以取代长期以来的王者JAVA。

img{512x368}

观念模式

大多数TESLA的用户都是从汽油动力汽车迁移而来,为了熟悉自己的新汽车,用户需要进行重大的观念转变。用户需要了解,他们需要跟踪的不是油位和冷却液位,而是电池电量。用户还需要了解充电周期以及不正确的充电技术对车辆的影响。

对于Go,此处的用户既是开发人员,又是推进Go项目实施工作的用户。开发人员需要特别了解项目需求,优势以及与Go相关的局限性。开发人员经常会从Go入手,这是对这门当前时代编程语言的一种狂热,从而常常忽略了它的局限性。诸如泛型和类型层次结构之类的简单概念也可以成为使用或不使用Go进行项目开发的成败之举。

支持

对于TESLA,售后支持的挑战来自于(充电)基础设施,特别是对基础设施的收费。这可能不是其母国(即美国)的最大障碍,但如果TESLA要扩展到中国等国家,则需要与当地政府机构合作开发必要的基础设施,以维持电动汽车的机动性。

关于Go,最大的障碍是拥有一个支持用户的技术社区。在这一领域,JAVA胜过其他已创立的语言,变得非常有说服力。JAVA得到了来自最大社区的支持。像Go这样发展壮大的语言肯定需要建立强大的,熟练的技术社区,这不仅将有助于Go成长为一种语言,而且还有助于其改进。

可持续性

TESLA建立了自己的品牌之后,要在销售和服务过程中提供最佳的客户支持来维持它,这是一项具有挑战性的工作。此外,由于其雄心勃勃的计划是通过提供新产品来迎合大众,因此需要观察他们在生产过程中是否能够维持同样高水平的质量控制。

与此处的TESLA相比,Go具有更大的可持续性关注。即使基于最小化和简单的原则构建,Go v2.0仍有望引入泛型。展望未来,它的创造者需要确保永不包含任何功能,概念和改进,不要偏离他们的愿景,并且最终不要成为像JAVA那样概念繁多的语言。早期采用JAVA的人也可能会告诉它,它起初只是很小的,但随着时间的流逝,它变得很沉重。Go应该避免走那条路

总结

考虑到上面所有观点,现在应该很清楚:TESLA取得成功的创新但艰难的道路同样适用于Go。它们各自领域中的困难本质上可能有所不同,但会以相似的原则影响着它们。


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

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

img{512x368}

我爱发短信:企业级短信平台定制开发专家 https://51smspush.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}

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

如发现本站页面被黑,比如:挂载广告、挖矿等恶意代码,请朋友们及时联系我。十分感谢! 图片广告位1 图片广告位2 图片广告位3 商务合作请联系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

文章

评论

  • 正在加载...

分类

标签

归档



View My Stats