是否可以將代碼字符串傳入go run
而不是go run /some/path/script.go
?我試過了:將代碼直接傳遞到無需文件的運行
echo "some awesome go code here" | go run
但是不行。謝謝。
是否可以將代碼字符串傳入go run
而不是go run /some/path/script.go
?我試過了:將代碼直接傳遞到無需文件的運行
echo "some awesome go code here" | go run
但是不行。謝謝。
我不認爲有這樣的選擇。至少不用標準的*g
編譯器或 go run
。
您可以嘗試使用gccgo作爲GCC supports reading from stdin。
因爲我認爲這將是一件有用的事情,我寫了一個相對較小的Python腳本,實現了我認爲你想要的。我把它叫做go-script
,這裏有一些用法示例:
# Assuming that test.go is a valid go file including package and imports
$ go-script --no-package < test.go
# Runs code from stdin, importing 'fmt' and wrapping it in a func main(){}
$ echo 'fmt.Println("test")' | go-script --import fmt --main
$ echo 'fmt.Println("test")' | go-script -ifmt -m
幫助:
Usage: go-script [options]
Options:
-h, --help show this help message and exit
-i PACKAGE, --import=PACKAGE
Import package of given name
-p, --no-package Don't specify 'package main' (enabled by default)
-m, --main Wrap input in a func main() {} block
-d, --debug Print the generated Go code instead of running it.
源(也可as a gist):
#!/usr/bin/env python
from __future__ import print_function
from optparse import OptionParser
import os
import sys
parser = OptionParser()
parser.add_option("-i", "--import", dest="imports", action="append", default=[],
help="Import package of given name", metavar="PACKAGE")
parser.add_option("-p", "--no-package", dest="package", action="store_false", default=True,
help="Don't specify 'package main' (enabled by default)")
parser.add_option("-m", "--main", dest="main", action="store_true", default=False,
help="Wrap input in a func main() {} block")
parser.add_option("-d", "--debug", dest="debug", action="store_true", default=False,
help="Print the generated Go code instead of running it.")
(options, args) = parser.parse_args()
stdin = ""
for line in sys.stdin.readlines():
stdin += "%s\n" % line
out = ""
if options.package:
out += "package main\n\n"
for package in options.imports:
out += "import \"%s\"\n" % package
out += "\n"
if options.main:
out += "func main() {\n%s\n}\n" % stdin
else:
out += stdin
if options.debug:
print(out)
else:
tmpfile = "%s%s" % (os.environ["TMPDIR"], "script.go")
f = open(tmpfile, 'w')
print(out, file=f)
f.close()
os.execlp("go", "", "run", tmpfile)
這工作
cat <<EOF | tee /tmp/blah.go | go run /tmp/blah.go
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
EOF
如果你不想打開一個文件並先編輯它。雖然我不會發現這種超級實用的每天使用。
謝謝,但仍然是將源代碼寫入磁盤'/ tmp/blah.go'。無論如何不寫文件? – Justin
一行代碼:'echo「something>> x.go && go run x.go' –
沒有電腦可以試用它,但我懷疑這會起作用嗎? 'echo「代碼代碼」|「去運行/ dev/stdin' – MatrixFrog
去運行/ dev/stdin不起作用。 Go檢查文件名是'* .go'。所以我試過'ln -s/dev/stdin stdin.go'。但是,這發生了: http://pastebin.com/YF1rv1bG 我的假設是去嘗試尋求。如果輸入文件是標準輸入,它會中斷。 –