分类 技术志 下的文章

HashiCorp联合创始人:Go是成功且无悔的选择

img{512x368}

提到HashiCorp这个公司,可能很多人都没听说过。但提到vagrant、consulnomad、terraform或者vault,那么你一定对这些工具或其中之一有所耳闻。这些工具都是HashiCorp这家公司的开源项目。

今年年初,HashiCorp在中国IT圈着实“火”了一把!当时HashiCorp宣布旗下软件禁止在中国区销售,这让很多重度依赖欧美主导的开源软件的国内大厂、小厂、传统IT公司以及IT化做的比较好的大型国企“惊出一身冷汗”。但事后证实只是HashiCorp旗下的企业软件禁止在中国区销售,开源版本不受影响。并且企业版软件禁售的原因是因为其下产品Vault的加密方式不符合中国当地法律要求,为了遵循当地法律,所以禁止销售。

好了,书归正传!除了早期开源项目是使用python、ruby等动态语言开发的,HashiCorp公司的后期主流产品均基于Go语言开发。在近期Hacker News的一则“Go语言已有十多年的历史了,你怎么看?”的帖子里,HashiCorp公司的联合创始人Mitchell Hashimoto分享了HashiCorp公司选择Go的考虑以及Go语言给公司带来的益处,并称“Go是HashiCorp成功且无悔的选择”

下面就是Mitchell Hashimoto印证其观点的阐述:

凭据:我大约在9年前开始使用Go,从那时起,我已经建立了一个拥有1000多名员工的公司,拥有约250名全职Go开发工程师。我们维护着数十个全部用Go编写的开源项目和库(Terraform,Vault等)。我们交付的商业产品已经被很多财富500强公司所使用。例如,Vault每年为我们知道的一家公司提供数万亿secret的服务。

提到Go,我能输出很多页的内容,但在这里我将尝试聚焦于其中的一部分。无论如何,Go都不是完美的语言或社区,但我喜欢它

注意:人们在阅读反馈时通常会带有“但X语言也可以…”或某些类似的说法,我不希望出现这种情况。除非我专门使用示例,否则我的反馈意见不针对任何其他语言。另一种语言可能会为您解决所有这些相同的问题!我只是在分享Go对于我们在这些方面的出色表现。

对初学者和新员工的友善

Go是一种非常简单的语言。从公司成立到现在,我们可以雇用从未使用过Go的人员,告诉他们几个学习Go的资源(例如Tour of Go),他们就可以在一周内向生产级项目提交代码了,不可思议!

使用Go你很难做出任何不明显的事情。这样做的代价通常是冗长或重复。但是我认为这带来的好处是值得的。我知道很多人不同意这一点,但是我个人更喜欢重复“if err!= nil”一千次,而不是引入需要重新学习的新错误控制流程。

我喜欢告诉新人(初级或非初级):从上至下读源文件,这就是程序执行的路线。在大多数情况下,这总是对的。

作为围绕Go建立快速成长的团队/公司的人,这是必不可少的。

灵活(flexible)

理论上,任何“通用语言”都可以编写任何软件。但是,我敢肯定,我们都会同意:使用某些语言编写某些软件更加容易,这是一件好事。

但是,我对Go的灵活程度感到震惊,而又不会感到被强迫。我们已经使用Go编写了桌面CLI,Web API,分布式系统,安全软件,网络软件,基础设施软件,记帐软件(accounting),机器人(bot)等。

而且,其中大多数软件每年的下载量达到数百万,并且已成功投入生产。

作为先前有着Ruby背景的我,很高兴已经实现的这些。但在做这些事情时也需要进行重大权衡。使用Go实现这些是可能的,但是您必须真正了解要进行的权衡。在Go中,当然要进行一些折衷,但是这些折衷是最小的,所以Go才起作用。

作为个人贡献者和公司管理者,这种灵活性在组建公司方面非常出色。

跨平台编译和静态链接的二进制文件

自9年前我采用Go的第一天起,Go就鼓励并简化了静态二进制编译和简单的跨平台编译。今天,您基本上只需要根据目标平台设置一下环境变量,然后运行go build,它通常就可以正常工作。

您仍然必须了解各类平台的各种陷阱(API可用性,文件路径,子进程/信号行为等),但仅就编译方面来说,Go让事情变得如此容易。

我以前在大规模软件开发方面的经验是在Ruby中使用Vagrant,而使其能跨平台工作是一个持续不断的巨大挑战。我需花几个月的时间让安装程序帮助跨平台设置正确的运行时环境。

从ARM系统和其他非标准体系结构(甚至是企业级Power …)的日益普及的角度来看,Go的这一特性非常重要。

文化

通常,Go社区的文化在哲学上与我对软件的看法非常一致。我将其粗略地描述为务实的和审慎的

我认为这种文化正是为什么许多人不喜欢Go(或似乎“讨厌” Go的原因,我认为这是对用于编程计算机的语言的一种疯狂的情感反应,但我离题了)。

Go社区不会“赶时髦”,不会抛开谨慎和务实而去紧急实现某种“最新技术”。有人认为,从某种定义上来说这是Go的劣势,但我认为这是一个巨大的好处。在我看来,Go核心团队这种三思后而行的行为方式与我十分契合(我不是核心团队的成员,因此这纯粹是一种看法)。我喜欢这种文化。

乐趣

归根结底,这门语言对我来说很有趣。我喜欢用它编写程序。这也很重要。

结论

我很幸运,Go在我建立公司的行业中脱颖而出。当我们开始使用它时,肯定不是那样(它是1.0之前的版本,Docker之前的版本,K8S之前的版本,多数基础设施软件仍在使用Ruby)。

我觉得该语言非常高效(例如,我们在大约6周内就实现了Vault 0.1版本),它已经证明了它可以适应大规模的需求,并且运行稳定(在美国主要的一个证券交易市场中,Vault处于每笔交易的热门路径上,并且服务从未停过),我们已经能够围绕它建立一个大公司和活跃的开源社区。

把我们成功无悔的选择传递下去吧!


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

img{512x368}

我的网课“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主机之路。

我的联系方式:

  • 微博:https://weibo.com/bigwhite20xx
  • 微信公众号:iamtonybai
  • 博客:tonybai.com
  • github: https://github.com/bigwhite
  • Gopher Daily(Go每日新闻)归档仓库 – https://github.com/bigwhite/gopherdaily

微信赞赏:
img{512x368}

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

Go,11周年

img{512x368}

本文翻译自Go官方博客文章《Eleven Years of Go》,原作者:Russ Cox

今天,我们一起庆祝Go语言正式开业发布11周年。去年的“Go turning 10”周年庆典聚会似乎已成为久远的回忆。这是艰难的一年,但我们一直保持了Go开发的步伐,并积累了很多亮点。

img{512x368}

在去年11月,我们在庆祝Go 10周年后不久就发布和上线了go.dev和pkg.go.dev站点。

今年2月,Go 1.14版本提供了第一个正式的“生产就绪”的go module实现,并进行了许多性能改进,包括更快的defer真正抢占式的goroutine调度,以减少调度和垃圾收集延迟。

在今年三月初,我们推出了新版protobuf APIgoogle.golang.org/protobuf,大幅改善了对protobuf reflection和自定义消息的支持。

当新冠疫情大流行发生时,我们决定在春季暂停所有公开发布或活动,因为大家都知道所有人的注意力都聚焦在其他地方。但是我们一直在努力,我们的团队中的一个成员加入了Apple/Google发起的“privacy-preserving exposure notifications”项目,以支持全球范围内的联系人追踪工作。5月,该小组启动了用Go编写的 reference backend server

我们继续改进gopls,这让许多编辑器受益并都启用了高级Go-aware支持。六月份,VSCode Go扩展正式加入Go项目,现在由从事gopls的同一位开发人员维护。

同样在6月,由于Go社区的反馈意见,我们还将pkg.go.dev背后的代码开源,并将其作为Go项目的一部分。

6月下旬,我们 发布了有关Go generics的最新设计草案,以及原型工具和一个支持go generics实验语法的playground

7月,我们发布并讨论了三个新的有关Go未来演化的设计草案:go:build文件系统接口构建时文件嵌入。(我们将在2021年看到所有新特性)

8月,Go 1.15版本发布!该版本以优化和bug修复为主,没有提供太多新功能。其最重要的部分是开始重写链接器,这使它在进行大型项目构建时,平均运行速度提高了20%,平均使用的内存减少了30%。

上个月,我们发起了年度Go用户调查。分析结果后,我们会将结果发布到博客上。

Go社区已经与其他所有人一起适应了“虚拟优先”的原则,今年我们看到了许多虚拟聚会和十多个虚拟Go会议。上周,Go团队在Google Open Source Live中举办了“Go Day”活动

前进

我们也对Go语言在其第12年即将发生的事情感到非常兴奋。近期,Go团队成员将参加GopherCon 2020并做以下展示和分享。请打开您的日历,做好提醒标记!

  • 11月11日上午10:00,Robert Griesemer的演讲“Typing [Generic] Go”;在10:30 AM进行Q&A。
  • 11月11日中午12:00,现场播放Go时间播客的实况录像:“What to Expect When You’re NOT Expecting”,该集播客由包括Hana Kim组成的专家调试小组主持。
  • Michael Knyszek在11月11日下午1:00发表演讲“Evolving the Go Memory Manager’s RAM and CPU Efficiency” ;在下午1:50进行Q&A。
  • Dan Scales在11月11日下午5:10发表演讲“Implementing Faster Defers”; 在下午5:40进行Q&A。
  • 11月12日下午3点,与朱莉·邱(Julie Qiu),丽贝卡·史翠宝(Rebecca Stambler),拉斯·考克斯(Russ Cox),萨默·阿杰曼尼(Sameer Ajmani)和范·里珀(Van Riper)一起的现场问答环节“ Go Team-Ask Me Anything” 。
  • 奥斯汀·克莱门茨(Austin Clements)在11月12日下午4:45发表演讲“Pardon the Interruption: Loop Preemption in Go 1.14” ; 在下午5:15进行Q&A。
  • 乔纳森·阿姆斯特丹(Jonathan Amsterdam)在11月13日下午1:00发表的演讲:“Working with Errors” ; 在下午1:50进行Q&A。
  • 卡门·安多(Carmen Andoh)11月13日下午5:55发表的演讲“Crossing the Chasm for Go: Two Million Users and Growing” 。

Go发布计划

2021年2月,Go 1.16版本将发布,该版本将包括新的文件系统接口构建时文件嵌入。它将完成链接器的重写,从而带来更多的性能改进。它将包括对新的Apple Silicon(GOARCH=arm64)Mac的支持。

2021年8月,Go 1.17版本无疑会带来更多功能和改进,尽管远远不够,确切的细节仍然悬而未决。它将包括一个针对x86-64新的基于寄存器的调用约定(不破坏现有程序集!),这将使程序整体更快。(对其他体系结构的支持将在以后的版本中发布。)新的//go:build行肯定会包含一个不错的功能,肯定比当前// +build更不容易出错。我们希望明年可以进行Beta测试的另一个备受期待的功能是对go test命令中的模糊测试(fuzz test)的支持

有关Go module

明年,我们将继续致力于开发对Go module的支持,并将其很好地集成到整个Go生态系统中。Go 1.16将包括我们迄今为止最流畅的Go module体验。我们最近的一项调查的初步结果是,现在有96%的用户已采用Go模块(高于一年前的90%)。

我们还将最终终止对基于GOPATH的开发的支持:使用标准库以外的依赖项的任何程序都将需要一个go.mod。(如果您尚未切换到go module,请参阅GOPATH Wiki页面以获取有关从GOPATH到go module的最后一步的详细信息。)

从一开始,Go module的目标就是“将软件包版本的概念添加到Go开发人员和我们的工具的常用词汇中”,从而为整个Go生态系统中的module和版本提供深度支持。整个生态系统对包版本的广泛理解使得go module镜像、chechsum数据库和module index成为可能。在明年,我们将看到更多module支持被添加到更多的工具和系统中。例如,我们计划研究新的工具,以帮助模块作者发布新版本(go release),并帮助module使用者摆脱过时的API并完成迁移(新的go fix)。

一个更为有说服力的例子是,我们创建了gopls来减少编辑器为支持Go而依赖许多外部工具的情况:将依赖一堆不支持go module的工具转变为只依赖一个支持module的工具。明年,我们将准备让VSCode Go扩展默认使用gopls,以提供出色的、现成的module体验,并将发布gopls 1.0。当然,gopls最大的优势之一是它与编辑器无关:任何支持语言服务器协议的编辑器都可以使用它。

版本信息的另一个重要用途是跟踪构建中的任何程序包是否具有已知漏洞。明年,我们计划开发一个已知漏洞的数据库以及基于该数据库进行漏洞检查的工具程序。

Go软件包发现站点pkg.go.dev是Go module启用的版本感知系统的另一个示例。我们一直致力于正确实现核心功能和用户体验,包括今天重新设计后的pkg.go.dev的上线。明年,我们将godoc.org统一为pkg.go.dev。我们还将扩展展示每个软件包的版本时间线,显示每个版本的重要更改,已知漏洞等,以实现你进行依赖添加决策时所需的所有信息。

我们很高兴看到从GOPATH到Go模块的旅程即将完成,以及Go模块正在启用的所有出色的依赖关系感知工具。

有关Go generics

每个人心中的下一个功能特性当然是泛型。如上所述,我们于今年6月发布了有关泛型最新设计草案。从那时起,我们一直在做细节上的完善,并将注意力转移到了实现可生产版本的细节上。我们将在2021年的整个过程中继续努力,以期在年底之前为人们提供一些试用的目标,也许它是Go 1.18 beta的一部分。

感谢大家

Go不仅限于我们这些Google Go团队的成员。我们要感谢与我们一起开发Go项目和工具的贡献者。除此之外,Go之所以成功,是因为所有在Go蓬勃发展的生态系统中工作并为之贡献的人们。Go之外的世界度过了艰难的一年。非常感谢您抽出宝贵的时间加入我们,并帮助Go取得成功。谢谢。我们希望大家都安全,并祝您一切顺利。


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

img{512x368}

我的网课“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

微信赞赏:
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