为什么 Go 是我最喜欢的编程语言(2017)[翻译]#IT人的升职加薪tips#

简介: 为什么 Go 是我最喜欢的编程语言(2017)[翻译]#IT人的升职加薪tips#

image.png

为什么 Go 语言是我最喜欢的编程语言


我努力尊重每个人的个人喜好,所以我通常会避开关于哪种是最好的编程语言、文本编辑器或操作系统的辩论。

然而,最近我被问到了几次为什么我喜欢和大量使用 Go,所以这是一个连贯的文章,可以填补我临时当面胡诌的空白 :-)。

我的背景

我曾用  C 和 Perl 语言写过一些大型项目。 我也同时使用 Python、Ruby、C ++、CHICKEN Scheme、Emacs  Lisp、Rust 和 Java(仅用于 Android )编写程序。 我了解一点 Lua、PHP、Erlang 和 Haskell。  在更之前的生活中,我使用 Delphi 开发过许多程序。

在 2009 年 Go 刚发布的时候,我对它有过短暂的了解。2012 年 Go 1.0 发布时,我开始认真地使用这门语言,因为它具有 Go 1 的兼容性保证。我仍然有 2012 年编写的代码在生产中运行,基本上没有动过。。

1. 清晰

格式化

按照惯例,使用 gofmt 工具格式化代码。 程序格式化代码不是一个新的想法,但与其之前的编程语言不同的是, gofmt 恰恰只支持一种规范风格。

所有代码的格式都是一样的,这使得阅读代码更容易;代码感觉很熟悉。这不仅在阅读标准库或 Go 编译器时有帮助,而且在与许多代码库一起工作时也有帮助--尤其考虑到开源,或大公司。

此外,自动格式化在代码审查中是一个巨大的时间节省,因为它消除了以前可以审查代码的整个维度:现在,你可以只让你的持续集成系统验证 gofmt 没有产生差异。

有趣的是,让我的编辑器在保存文件时应用 gofmt ,改变了我写代码的方式。我曾经试图与格式化器所执行的内容相匹配,然后让它纠正我的错误。现在,我尽可能快地表达我的想法,并相信 gofmt 会让它变得漂亮(我输入的 例子,点击 Format )。

高质量代码

我经常使用标准库( docs source),见下文。

到目前为止,我所读过的所有标准库代码质量都非常高。

一个示例是 image/jpeg 包:我当时不知道 JPEG 如何在此时工作,但通过在 维基百科 JPEG 文章image/jpeg 代码之间的切换,很容易就能掌握。 如果这个包有更多的注释,我会把它作为一个教学的示例。

观点

我已经同意 Go 社区持有的许多观点,例如:

较少的关键字和抽象层

Go 规范只列出了 25 个关键字,我可以很容易地把这些关键词记在脑子里。

内置函数 类型也是如此。

根据我的经验,少量的抽象层和概念使得这门语言容易上手,并容易适应。

在我们谈论这个问题的时候:我对 GO 规范的可读性感到惊讶。 它似乎真的以程序员为目标(而不是标准委员会?)。

2. 快速

快反馈/低延时

我喜欢快速反馈。我欣赏快速加载的网站,我更喜欢流畅的用户界面,不延迟,我随时都会选择一个快速的工具而不是一个更强大的工具。大型网站的 调查结果发现,大多数人都有这种想法。

Go 编译器的作者尊重我对低延迟的渴望:编译速度对他们来说很重要,新的优化会被仔细评估权衡,优化是否会降低编译速度。

我的一个朋友以前没有使用过 Go 。在使用 go get 安装了 RobustIRC 之后,他们得出结论,Go 一定是一种解释语言,我不得不纠正他们:不,Go的编译器就是这么快。

大多数 Go 工具也不例外,例如 gofmtgoimports 都快得惊人。

资源使用量最大化

对于批处理程序(相对于互动程序而言),充分利用可用资源通常比低延迟更重要。

剖析和改变Go程序以利用所有可用的 IOPS 、网络带宽或计算能力是非常容易的。举个例子,我写过填补1 Gbps 的 链接,并优化了 debiman 以利用所有可用资源,使其运行时间减少了几个小时。

3. 丰富的标准库

Go 标准库提供了有效使用常见通信协议和数据存储格式/机制的手段,如TCP/IP、HTTP、JPEG、SQL、...

Go 的标准库是我见过的最好的库。我认为它组织良好、干净、小而全面:我经常发现只用标准库和一两个外部包就可以写出合理规模的程序。

特定领域的数据类型和算法(一般来说)不包括在标准库,例如 golang.org/x/net/htmlgolang.org/x 命名空间也是新代码进入标准库之前的一个暂存区域:Go 1的兼容性保证排除了任何破坏性的改变,即使它们显然是值得的。一个突出的例子是 golang.org/x/crypto/ssh ,它不得不破坏现有的代码以 建立一个更安全的默认值

4. 工具

为了下载、编译、安装和更新Go软件包,我使用 go get 工具。

我所使用的所有 Go 代码库都使用了内置的 测试设施。这不仅使测试变得简单而快速,而且 覆盖率报告也很容易得到。

每当一个程序使用的资源超过预期,我就会启动 pprof。关于 pprof 的介绍,请看 golang.org 的这篇 博文,或者我关于优化 Debian Code Search 的 文章。在导入 net/http/pprof 包之后,你可以在你的服务器运行时对其进行剖析,而无需重新编译或重新启动。

交叉编译就像设置 GOARCH 环境变量一样简单,例如,GOARCH=arm64 用于针对 Raspberry Pi 3 的编译。值得注意的是,工具也可以跨平台工作。例如,我可以在我的 amd64 电脑上对 gokrazy 进行配置:go tool pprof ~/go/bin/linux_arm64/dhcp http://gokrazy:3112/debug/pprof/heap

godoc 以纯文本形式显示文档,或通过 HTTP 提供文档。 godoc.org 是一个公共实例,但我运行一个本地实例,以便在离线或尚未发布的软件包时使用。

请注意,这些都是该语言中的标准工具。在 C 语言中,上述的每一项都是要完成的重大成就。在 Go 中,我们认为它们是理所当然的。

入门

希望我能够表达我为什么喜欢用 Go 工作。

如果你有兴趣开始使用 Go,请查看人们加入Gophers slack 频道时指出的 初学者资源。见 https://golang.org/help/

注意事项

当然,没有哪个编程工具是完全没有问题的。鉴于这篇文章解释了为什么 Go 是我最喜欢的编程语言,它的重点是积极的一面。不过,我还是要顺便提一下几个问题。

  • 如果你使用的 Go 包没有提供稳定的API,你可能想使用一个特定的、已知的工作版本。你最好的选择是 dep 工具,在写这篇文章时它还不是语言的一部分。
  • 直言不讳的 Go 代码不一定能转化为最高性能的机器代码,而且运行时间也是有代价的(小的)。在极少数情况下,我发现性能不足,我成功地求助于 cgo 或汇编程序。如果你的领域是硬实时应用程序或其他对性能要求极高的代码,你的路可能会有所不同。
  • 我写道,Go标准库是我见过的最好的标准库,但这并不意味着它没有任何问题。其中一个例子是通过标准库最古老的包之一 go/ast 以编程方式修改 Go 代码时对 注释的复杂处理

     

相关文章
|
6月前
|
Java 程序员 Linux
IT圈的“鄙视链”大揭秘:从Java到Go,编程语言之战!
IT圈的“鄙视链”大揭秘:从Java到Go,编程语言之战!
|
2月前
|
编译器 Go
go语言学习记录(关于一些奇怪的疑问)有别于其他编程语言
本文探讨了Go语言中的常量概念,特别是特殊常量iota的使用方法及其自动递增特性。同时,文中还提到了在声明常量时,后续常量可沿用前一个值的特点,以及在遍历map时可能遇到的非顺序打印问题。
|
3月前
|
程序员 Go
Go 语言:面向对象还是非面向对象?揭开编程语言的本质
Go 语言:面向对象还是非面向对象?揭开编程语言的本质
|
3月前
|
Java Go 开发者
|
5月前
|
Java Go C#
编程语言C#、C++、Java、Python、go 选择哪个好?
我想说的是,不论选择哪种编程语言,决定选择的都是你最终的目的,做选择之前,先充分调研每一个选择项,再做选择思路就会非常清晰了。
119 3
|
6月前
|
Rust 安全 Java
Rust 和 Go:如何选择最适合你的编程语言
Rust 和 Go 都是优秀的选择 首先,重要的是要说 Rust 和 Go 都是非常优秀的编程语言。它们都是现代的、强大的,被广泛采用,且提供了卓越的性能。
76 1
|
6月前
|
Kubernetes Go 开发者
GO编程语言:简洁、高效、强大的开源编程语言
GO语言,又称Golang,是由Google公司开发的一种静态类型、编译型的编程语言。其设计理念是提供一种直观、简洁、可靠的解决方案
86 2
|
6月前
|
编解码 JavaScript 前端开发
【专栏】介绍了字符串Base64编解码的基本原理和在Java、Python、C++、JavaScript及Go等编程语言中的实现示例
【4月更文挑战第29天】本文介绍了字符串Base64编解码的基本原理和在Java、Python、C++、JavaScript及Go等编程语言中的实现示例。Base64编码将24位二进制数据转换为32位可打印字符,用“=”作填充。文中展示了各语言的编码解码代码,帮助开发者理解并应用于实际项目。
146 1
|
6月前
|
测试技术 Go
Go+:一种简单而强大的编程语言
Go+:一种简单而强大的编程语言
|
6月前
|
Cloud Native Go 云计算
多范式编程语言Go:并发与静态类型的结合
Go语言是Google于2007年开发的开源编程语言,旨在提高程序开发和部署的效率。它的独特特征在于结合了并发处理与静态类型系统,提供了简洁、高效、并行处理能力的编程体验。本文将探讨Go语言的特点、应用场景以及其在现代软件开发中的优势。