go 脚本开发(如何在Go中轻松编写类似)

go 脚本开发(如何在Go中轻松编写类似)(1)

Script 是一个 Go 库,用于执行 Shell 脚本擅长的任务:读取文件,执行子进程,计算行,匹配字符串等。

在 Go 中编写系统管理程序并不像在传统的 shell 中那样容易,而 Script 的出现,刚好弥补了这一问题。即使像 Shell 脚本在数据流(管道)上完成一系列操作,Script 也能做到。

go 脚本开发(如何在Go中轻松编写类似)(2)

能用 Script 做什么呢?我们举个例子,假设您要以字符串形式读取文件的内容:

contents, err := script.File("test.txt").String()

这看起来很简单,但假设您现在想要计算该文件中的行数。

numLines, err := script.File("test.txt").CountLines()

对于更具挑战性的事情,让我们尝试计算文件中与字符串“Error”匹配的行数:

numErrors, err := script.File("test.txt").Match("Error").CountLines()

但是,如果不是读取特定文件,我们想简单地将输入输入到该程序中,并且只输出匹配的行(如grep)?

script.Stdin().Match("Error").Stdout()

那太简单了!因此,让我们在命令行中传入一个文件列表,让我们的程序按顺序读取它们并输出匹配的行:

script.Args().Concat().Match("Error").Stdout()

那是什么?您想将该输出附加到文件而不是将其打印到终端?没问题:

script.Args().Concat().Match("Error").AppendFile("/var/log/errors.txt")

它是如何工作的?

函数调用看起来有点奇怪。发生了什么?

关于Unix shell及其许多模仿者的一个有趣的事情是你可以将操作组合成一个管道

cat test.txt | grep Error | wc -l

管道的每个阶段的输出都会输入到下一个阶段,您可以将每个阶段视为一个过滤器,仅将其输入的某些部分传递给其输出。

相比之下,在原始 Go 中编写类似 shell 的脚本要方便得多,因为您所做的每件事都会返回不同的数据类型,并且您必须(或至少应该)在每次操作后检查错误。

在用于系统管理的脚本中,我们经常希望以快速方便的方式组合这样的不同操作。如果在管道的某处发生错误,我们想在结束时检查一次,而不是在每次操作之后检查。

GitHub 地址:https://github.com/bitfield/script


网站崩溃找不到原因?平台搭建无从下手?热门技术不想落伍?想要变强找不到资料?

[IT拯救联盟],让大牛和同伴拯救你,带你装x带你飞。定期干货分享、大牛专业解答、实用IT工具优选.....

私信小编“联盟”,即可加入我们~

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页