我尽量尊重每个人的个人喜好,所以我通常会避免争论哪种语言是最好的编程语言,文本编辑器还是操作系统。
不过最近好几次被问到为什么喜欢和大量使用围棋,所以这里有一篇连贯的文章来填补我即兴个人漫谈的空白:-)。
我的背景
我在许多像样的项目中使用过C和Perl。我用Python,Ruby,C ++,CHICKEN Scheme,E***cs Lisp,Rust,Java写程序(仅限Android)。对Lua,PHP,Erlang,Haskell有所了解。上辈子我用Delphi开发了很多程序。
1。透明度
格式设置
传统上,Gofmt工具用于格式化go代码。以编程方式格式化代码并不是一个新概念,但是与其前辈相反,它只支持gofmt的规范风格。
以同样的方式格式化所有代码,以便于阅读。代码感觉很熟悉。这不仅在阅读标准库或Go编译器时有帮助,而且在处理许多代码库(例如开源或大公司)时也有帮助。
此外,自动格式化可以在代码检查过程中节省大量时间,因为它消除了以前可以检查的代码的整个维度:现在,您只需要让您的持续集成系统验证gofmt中不会有任何差异。
有趣的是,让我的编辑器在gofmt保存文件时生效改变了我写代码的方式。我曾经尝试匹配格式化程序会做的事情,然后让它纠正我的错误。如今,我以最快的速度表达自己的想法,并且相信gofmt可以让它变得很美(比如,要打什么东西,请点击“格式”)。
高质量代码
我使用许多标准库(docs,source),请看下面。
到目前为止,我看过的所有标准库代码质量都非常高。
一个例子是i***ge/jpeg包:我当时不知道jpeg是怎么工作的,但是通过在***JPEG文章和i***ge/jpeg代码之间切换,很容易实现。如果对这个软件包有其他评论,我把它当成教学实现。
评论
我同意Go社区的许多观点,例如:
默认情况下,变量名应该短一些,并且随着声明使用名称的增加,其名称也变得更具描述性。保持依赖性树很小(在合理的程度):稍微***胜于一点依赖性引入抽象层是有代价的。Go代码通常非常清晰,但有时会有些重复。有关更多信息,请参见CodeReviewComments和Go Proverbs。
一些关键字和抽象层
Go规范只列出了25个关键词,我很容易记住。
内置函数和类型也是如此。
以我的经验来看,少量的抽象层次和概念,让语言变得简单易学,很快就感觉很舒服。
当我们谈论它时:我对Go规范的可读性感到惊讶。它似乎真的是针对程序员的(而不是标准委员会)。
2。速度
快速反馈/低延迟
我喜欢快速反馈:我希望网站可以快速加载,我更喜欢流畅的用户界面,他们不会滞后,我会选择快速的工具,而不是每天更强大的工具。大型网络媒体资源的调查结果证实,这种行为是很多人共有的。
Go编译器的作者尊重我对低延迟的渴望:编译速度对他们来说很重要,新的优化方案会仔细权衡他们是否会减慢编译速度。
我的一个朋友以前从未用过围棋。用安装的RobustIRC桥编译后,他们得出的结论是,Go一定是解释性语言,我要纠正一下:不,Go编译器就是那么快。
大多数Go工具也不例外,比如gofmt和goimports都非常快。
最大资源使用率
对于批处理应用程序(相对于交互式应用程序),充分利用可用资源通常比低延迟更重要。
配置和更改Go程序以利用所有可用的IOPS、网络带宽或计算非常容易。例如,我写了关于填充1 Gbps链接和优化debi***n以利用所有可用资源的文章,从而将其运行时间减少了几个小时。
3。丰富的标准库
Go标准库提供了有效使用公共通信协议和数据存储格式/机制的手段,如TCP/IP、HTTP、JPEG、SQL、…
Go的标准库是我见过的最好的库。我认为它组织得很好,很干净,很小,很全面:我经常发现我只需要使用标准库和一两个外部包就可以编写出合理大小的程序。
(通常)它不包含特定领域的数据类型和算法,也不在标准库中(例如golang.org/x/net/html)。名为空的golang.org/x也用作新代码进入标准库之前的临时区域:to 1兼容性保证,排除任何重大更改,即使这些更改显然是值得的。一个著名的例子是golang.org/x/crypto/ssh,,它必须打破现有的代码,以建立一个更安全的默认值。
4。工具
为了下载、编译、安装和更新Go包,我使用了go get工具。
我用过的所有Go代码库都使用内置测试函数。这不仅使得快速测试变得容易,而且使得获得覆盖报告变得容易。
每当程序使用的资源比预期的多,我就会启动pprof。介绍请参考golang.org的这篇博文pprof,或者我关于优化Debian代码搜索的博文。导入。net/http/pprof包,您可以在服务器运行时对其进行分析,而无需重新编译或重新启动。
交叉编译就像为Raspberry Pi3设置GOARCH环境变量一样简单,比如GOARCH=arm***。值得注意的是,工具也可以跨平台工作!比如我可以从amd***电脑分析gok razy:gotoolprof ~/go/bin/Linux _ arm ***/DHCP http://gok razy:3112/debug/pprof/heap。
Godoc以纯文本形式显示文档,或者通过HTTP提供文档。Godoc.org是一个公共实例,但我运行一个本地实例用于离线使用或未发布的软件包。
请注意,这些是该语言附带的标准工具。从C来说,以上每一项都是重要的成果。在围棋中,我们认为它们是理所当然的。
入门
希望能表达出我乐于使用Go的原因。
如果你有兴趣开始使用围棋,请查看我们为加入Gophers休闲频道的人提供的初学者资源。
注释
当然,没有编程工具也没有问题。因为这篇文章解释了为什么Go是我最喜欢的编程语言,所以它将集中在积极的方面。不过,我会顺便提一些问题:
如果使用不提供稳定API的Go软件包,则可能要使用特定的已知工作版本。最好的选择是dep工具,在撰写本文时,它不属于该语言的一部分。惯用的Go代码不一定会转换为性能最高的机器代码,并且运行时要付出(小的)代价。在极少数情况下,我发现缺乏性能,因此我成功地求助于cgo或汇编程序。但是,如果您的域是硬实时应用程序或其他对性能至关重要的代码,那么您的工作量可能会有所不同。我写过Go标准库是我见过的最好的库,但这并不意味着它没有任何问题。一个示例是在通过标准库最旧的软件包之一以编程方式修改Go代码时对注释的复杂处理go/ast。
本文来自少年我念你投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/495893.html