用于自动化脚本的VLang –超快速Bash,Python和Go替代方案

2020-12-27 21:44:01

如果您在技术行业工作了足够长的时间,无论您身在何处,都有可能使用Bash或Python多次以自动化某些操作,而这些操作本来需要您手动重复执行。

我显然也不例外,并且从2000年代开始就编写了自动化脚本。我已经完成了一些项目,从编写脚本为自己更新数千个服务器,到简化工程师的开发/部署流程,一直到为最终用户构建应用程序/固件安装程序。根据我的经验,有三个主要因素决定了我为每个项目选择的脚本语言:

在过去,如果自动化项目是使用简单的逻辑直接进行的,则我将始终使用bash脚本,因为它相对较快且语法超级简单。自动化shell命令就像将其放入一行一样简单。例如,如果我希望脚本执行cat / etc / os-release,那么我要做的就是这样:

与更复杂的语言(如Python)相比,这节省了很多开发时间。为了在Python中做同样的事情,我会写:

从代码片段中可以看出,很明显,为什么Bash可以更简单地自动化非常规任务。但是,有些自动化项目有些复杂,超出了bash脚本的功能。在那种情况下,我会放弃性能并选择Python来实现自动化,尤其是在涉及需要更多计算或GUI(Gooey)与用户交互的事情时。

近年来,GoLang(Go)变得越来越流行,我开始使用它来开发一些软件项目。因此,我还开始使用Go进行自动化,因为作为一种具有相对简单语法的编译语言,执行时间(性能)比Python快得多。另外,使用一种语言来自动化事物(与软件项目所使用的语言一样)可以带来某种一致性,总的来说,这对我来说很容易。就像您要说的是广东话(中国方言)一样,而不必与销售团队说广东话,而与操作团队说普通话,然后发现自己使用了怪异的术语,并且由于不得不快速地翻译而迷失了自己。从一种方言跳到另一种方言。

但是,今年早些时候,我发现了一种非常有趣的新跨平台编译语言,称为VLang。这不是另一种语言,它是已经存在的诸如Python的Julia之类的产品的一种一对一的更好版本,而是一种语言,它像所有流行的现代语言中的爱孩子一样,旨在缩小语言范围,快速,安全,简单,并且学习曲线很少。经过深思熟虑,这个概念非常引人注目,以至于好处是一个长长而与众不同的清单,我鼓励有兴趣的人亲自检查VLang网站以查看这些好处是什么。确实非常令人印象深刻。目前,这是一些好处/区别因素的直接顶峰:

那么,在保持简单语法的同时,V快多少?通过编写仅执行ls -lah的脚本并输出错误处理结果来进行测试。代码如下所示:

包主要导入" fmt"导入"字节"导入&#34 / os / exec" func main(){cmd:= exec.Command(" ls&#34 ;," -lah")var out,stderr字节.buffer cmd.Stdout =& out cmd.Stderr =& ; stderr err:= cmd.Run()如果err!= nil {fmt.Println(err)} fmt.Println(out.String())}

从上面的代码片段可以看出,Bash是最简单的。 VLang位居第二,Python紧随其后。实际上,如果您不想对此命令执行错误处理,则Python可能比VLang更简单,尤其是因为我不知道有没有从VLang中删除错误处理的选项。但是,如果我们从代码中删除了错误处理,那么安全因素将受到损害,无论如何在任何情况下我们都不希望这样做。最后,GoLang在这方面对所有人的影响都非常严重。

我首先要说的是,不应将0.002s的增量用作足够强的数据点来确认性能差异,因为Bash和VLang几乎每次在短时间内连续运行时都会得到不同的结果,并且大多数时间,它们比Go快得多(最高0.004s),而其他时候却比Go慢,但最多只有0.002s。另一方面,Go在每次运行中几乎总是在同一时间完成。

这样一来,Go和VLang的单次运行性能在性能上可与Bash相媲美或比Bash更快,而Python则明显慢得多。但是,如果不是更快的话,VLang的连续完成时间与Bash最为相近,并且以0.004s(真实)的记录时间赢得了与Bash的比赛。当Vlang与Bash并驾齐驱时,最令人敬畏的是VLang具有强大的功能,可以进行更复杂的计算,并且拥有像Python和Go一样的强大的本机跨平台GUI库,但是语法复杂度最小,并且不会受到影响任何性能下降。

在存储消耗方面,预计编译语言将使用其二进制文件来占用更多存储空间,因此让我们暂时将Bash和Python(大小均为4K)排除在外,并比较Go和VLang。

我认为数字说明了一切。让我们根据前面提到的3个主要因素来总结VLang,这三个主要因素可帮助我确定项目使用哪种语言:

它足够强大,可以处理复杂的计算,并且具有完善的GUI库 即使与Bash相比,执行简单的系统命令时它速度更快或不会降低性能 这就是为什么我认为VLang在更复杂的自动化方面可以很好地替代Python和Go,在许多情况下,VLang也可以替代Bash以实现简单的自动化。 当然,您可能会说VLang很新,没有那么多的图书馆或社区支持(但是),但是随着项目的活跃程度和贡献者/采纳者的快速增长,很可能在一定的时间里, 在自动化领域,它将完全超越Python和Go。 这些测试中可能现在缺少的是计算速度比较,我将在其他时间再发表一篇文章。 如果我在1月1日之前不写其他帖子,那么大家新年快乐! 2021年5月对世界来说将是比2020年更好的一年!