脚本语言采用编译_将 Go 用作脚本语言,不看后悔
Go 作为一种高性能的网络和并发系统编程语言,其生态应用逐渐扩展,吸引了越来越多的开发人员将其用作脚本语言,以替代 Python 和 Bash尽管 Go 本身并不是为脚本语言而设计,但通过一些简单的准备工作,我们完全可以将其用作脚本语言。
Codelang 的 Elton Minetto 指出,Go 作为脚本语言具有巨大潜力,这不仅归功于其强大的功能和简洁的语法,还包括对 goroutines 的出色支持Google 的软件工程师 Eyal Posener 进一步补充了使用 Go 作为脚本语言的理由,例如,丰富的标准库和语言的简洁性使得维护工作更加轻松。
相比之下,前 Google 工程师 David Crawshaw 强调了 Go 在编写脚本任务时的便捷性,因为大多数开发人员都在花费大量时间处理复杂的程序基本上,我一直在编写 Go 程序,偶尔也会用 Bash、Perl 和 Python。
有时候,这些编程语言会自然而然地浮现在脑海中对于日常任务和不频繁的脚本编写,使用相同的编程语言可以显著提高效率Cloudflare 的工程师 Ignat Korchagin 指出,作为一种强类型语言,Go 能够使脚本更加可靠,减少拼写错误等小问题在运行时引发的错误。
Codenation 使用 Go 编写的脚本文件来自动化重复性任务,这已成为开发流程的一部分,也是 CI/CD 管道中的重要环节在 Codenation 内部,Go 脚本通过 go run 命令执行Posener 指出:“实际上,。
go run 并非用作解释器”bash 和 Python 是解释型语言,它们在读取脚本时直接执行而当你输入 go run 时,Go 编译器会先编译程序,再运行它们Go 程序的编译时间非常短,这使得它看起来像是解释型语言。
为了使 Go 脚本在 shell 脚本中表现良好,Codenation 的工程师使用了许多有用的 Go 软件包:github.com/fatih/color 用于输出带颜色的文本github.com/schollz/progressbar。
用于为长时间运行的任务创建进度条github.com/jimlawless/whereami 用于捕获源代码的文件名、行号和函数等信息,有助于调试github.com/spf13/cobra 用于更轻松地创建带有输入选项和文档的复杂脚本。
Crawshaw 表示,尽管使用 go run 命令运行 Go 程序非常有效,但它并非完美的解决方案特别是,Go 缺乏对读取-求值-输出循环 (REPL) 的支持,也无法轻松集成 Shebang,这使得脚本像二进制程序一样执行变得困难。
【星界云手机】,给你不一样的游戏体验!云端托管手游,挂机脚本助力,让你无需手动操作,轻松完成日常任务,同时享受游戏的乐趣。释放双手,让你更专注于游戏策略,成为游戏中的高手!
此外,Go 的错误处理更适合大型项目,而不是简短的脚本为此,他开始研究 Neugram 项目,旨在创建一个 Go 克隆程序以解决上述限制遗憾的是,Neugram 项目似乎已被废弃,可能是由于 Go 语法的复杂性。
Gomacro 项目则采用类似的方法,它是一种 Go 解释器,支持类似 Lisp 的宏,不仅可以生成代码,还提供了一种泛型形式Gomacro 几乎是一个完整的 Go 解释器,用纯 Go 语言实现它提供了交互式 REPL 模式和脚本模式,运行时无需 Go 构建工具链(除了一种非常特殊的情况:在运行时导入第三方包)。
除了非常适合编写脚本外,Gomacro 还旨在将 Go 作为中间语言,解释为 Go 的标准详细规范,并提供 Go 源代码的调试器尽管 Gomacro 为使用 Go 编写脚本提供了最大灵活性,但它不是标准的 Go 语言,这引发了一些担忧。
Posener 对使用标准 Go 语言作为脚本语言的可能性进行了详细分析,包括解决 Shebang 丢失的方法然而,这些方法在某种程度上都有不足似乎没有完美的解决方案,我也不明白为什么不能有一个完美的解决方案。
看起来,运行 Go 脚本的最简单且最无问题的方法就是使用 go run 命令[...] 这就是我认为该领域仍需改进的原因同样,我认为更改程序语言以忽略 Shebang 也不会有什么坏处对于 Linux 系统,这里有一个高级技巧,可以在完全支持 。
Shebang 的情况下从命令行运行 Go 脚本这种方法依赖于 Linux 内核对 Shebang 的支持,以及从用户空间扩展受支持二进制格式的可能性简而言之,Korchagin 建议使用以下方式注册二进制:。
$ Echo :golang:E::go::/usr/local/bin/gorun:OC | sudo tee /proc/sys/fs/binfmt_misc/register :golang:E::go::/usr/local/bin/gorun:OC
这样就可以设置完全标准的 Go 语言的可执行位,例如:package main import ( "fmt" "os" ) func main() { s := "world" if len(os.Args) > 1 { s = os.Args[1] } fmt.Printf("Hello, %v!", s) fmt.Println("") if s == "fail" { os.Exit(30) } }
然后执行:$ chmod u+x helloscript.go $ ./helloscript.go Hello, world! $ ./helloscript.go gopher Hello, gopher! $ ./helloscript.go fail Hello, fail! $ Echo $? 30
尽管这种方法无法提供对 REPL 的支持,但 Shebang 可能足以满足典型的用例。

游戏爱好者的福音!【星界云手机】,云端托管手游,帮你实现24小时不间断游戏。挂机脚本助你完成日常任务,让你的游戏之旅更加轻松,让你成为游戏世界的领军者!
本站所有文章、数据、图片均来自互联网,一切版权均归源网站或源作者所有。
如果侵犯了你的权益请来信告知我们删除。邮箱:631580315@qq.com