go
正在成为system
的语言。我想知道是否可以将go
代码作为脚本运行而不编译它,是否有可能这样做?
更新: 动机(因为有关于动机的问题)来自How to use Scala as a scripting language
问题您想在Unix系统上使用Scala作为脚本语言, 替换你在Unix shell中编写的其他脚本(Bourne Shell, Bash),Perl,PHP,Ruby等
更新:
我想知道我能做多少"虐待" go run
能够将go
代码运行为scripts
虽然已编译(我喜欢它已编译),但看起来go run
可以让我有机会更换scripting
,在服务器上有源文件,并在go run
编译时将其作为源运行,但我仍然管理源而不是可执行文件。
更新: 另外看了gorun
gorun - Go源文件的类似脚本的跑步者。
更新:
虽然有一个动机和工具试图解决不能作为脚本运行,我不会去它,+我已被告知它没有生产准备好,并被建议不要使用它因为它没有准备好生产,它不符合它的目的,并且需要转移脚本方便,而不是go
。 (我没有任何反对编译,静态打字的东西,我是它的忠实粉丝,但想要类似于编写脚本的东西)。
答案 0 :(得分:6)
我不是go的专家,但你可以这样做。我知道这不优雅,但可能是开始的事情:)
UPDATE TABLE_B as tb,
(
SELECT * FROM TABLE_A
) as ta
SET tb.id = ta.id WHERE tb.name = ta.name;
答案 1 :(得分:4)
正如其他人所说,Go是compiled language。用Go语言编写的程序依赖于Go运行时,它被添加到可执行二进制文件中。
Go运行时提供了一些重要的功能,例如垃圾收集,goroutine调度,运行时反射等。没有它们,Go应用程序无法按照语言规范进行保证。
理论 Go解释器必须模拟这些功能,这实际上意味着包含Go运行时和Go编译器。没有这样的东西,也没有必要 另请注意,如果代码尚未编译,则意味着Go解释器必须包含 all 标准库,因为Go"脚本"可以合法地引用标准库中的任何内容(当编译Go应用程序时,只有它使用/引用的内容被编译成可执行的二进制文件)。
要快速测试某些内容,只需使用go run
,它还会编译您的应用并在临时文件夹中构建可执行二进制文件,启动该临时文件并在您的应用退出时清除它。
"解"由他人发布可能"感觉"就像脚本一样,但它们只不过是自动化/隐藏将Go源编译为可执行二进制文件然后启动该二进制文件的过程。这正是go run
所做的事情(它也清理了临时二进制文件)。
答案 2 :(得分:4)
见Neugram, Go scripting。从它的文档:
#!/usr/bin/ng
// Start a web server to serve files.
import "net/http"
pwd := $$ echo $PWD $$
h := http.FileServer(http.Dir(pwd))
http.ListenAndServe(":8080", h)
答案 3 :(得分:2)
在linux上绝对有可能,支持cf:https://blog.cloudflare.com/using-go-as-a-scripting-language-in-linux
如果您不想使用已经提到的“ shebang”,可能会有限制:
//usr/bin/env go run "$0" "$@"; exit "$?"
执行此操作:
# check if binfmt_misc is already active
# (should already be done through systemd)
mount | grep binfmt_misc
# if not already mounted
sudo mount binfmt_misc -t binfmt_misc /proc/sys/fs/binfmt_misc
# get gorun and place it so it will work
go get github.com/erning/gorun
sudo mv $GOPATH/bin/gorun /usr/local/bin
# make .go scripts being run with `gorun` wrapper script
echo ':golang:E::go::/usr/local/bin/gorun:OC' | sudo tee /proc/sys/fs/binfmt_misc/register
这仅用于一次性测试。为了使这个持久化,我将其作为/etc/rc.local
的倒数第二行:
echo ':golang:E::go::/usr/local/bin/gorun:OC' | tee /proc/sys/fs/binfmt_misc/register 1>/dev/null
如果在开发脚本时遇到诸如“缓存”之类的问题,请查看/tmp/gorun-$(hostname)-USERID
。
我喜欢bash
,但是一旦您需要合适的数据结构(bash数组和关联数组由于无法使用而无法计算),就需要另一种语言。
Golang为我编写的代码比python更快,并且上面描述的任何golang设置都会为我做。无需与python 2 vs 3对抗,它的libs和pip恐怖,可以随意分配二进制文件,并且可以立即更改小型一次性脚本的源代码,这就是这种方法肯定有其优势的原因。
答案 4 :(得分:-3)
不,这既不可能也不可取。