将.go文件作为附加参数传递给`go run`

Shi*_*iSi 5 go command-line-arguments

对于快速黑客攻击,我更喜欢使用go run prog.go ...而不是先构建可执行文件.但是,我正在处理的程序应该使用另一个go-file作为参数.因此,go run编译后的二进制文件表现不同:

go run prog.go foo.go
Run Code Online (Sandbox Code Playgroud)

将尝试执行两个go文件,而

go build prog.go && ./prog foo.go
Run Code Online (Sandbox Code Playgroud)

将正确地将我的文件作为输入(预期的行为).现在我可以像这样传递额外的args go run ... -- foo.go,但是因为--文件的位置os.Argsgo run prog.go -- foo.go和之间不同./prog foo.go.任何简单的方案?我想避免进行完整的标记处理.我应该放弃并坚持编译版本吗?

Cal*_*leb 6

这是不可能的。这是命令的来源

for i < len(args) && strings.HasSuffix(args[i], ".go") {
    i++
}
files, cmdArgs := args[:i], args[i:]
Run Code Online (Sandbox Code Playgroud)

您可以使用go install代替go build. 这会将您的可执行文件放在您的$GOPATH/bin文件夹中(我不喜欢将二进制文件放在同一个文件夹中,因为有时我不小心将它添加到 git 中)。但其实差别不大。

您可能要考虑的另一个选项是rerun. 每当您更改文件时,它都会自动重新编译并运行您的代码:

rerun path/to/your/project foo.go
Run Code Online (Sandbox Code Playgroud)