通过'go run'将CLI参数传递给excutables

for*_*dya 6 go

我有一个程序'readfile.go',我想把命令行参数os.Args [1]也作为'readfile.go'.

然而,"go run"认为它是自身的附加参数而不是输出可执行文件.是否有一个标志可以告诉'go run'这是可执行文件的参数?

mvaidya@mvaidya-VirtualBox:~/junkeork$ go run readfile.go readfile.go
package main: case-insensitive file name collision: "readfile.go" and "readfile.go"
mvaidya@mvaidya-VirtualBox:~/junkeork$

错误:

package main:不区分大小写的文件名冲突:"readfile.go"和"readfile.go"

Sto*_*ica 12

您可以使用--从参数中分隔gofiles:

go run readfile.go -- readfile.go
Run Code Online (Sandbox Code Playgroud)

  • 这很有效,非常感谢.但请注意,`os.Args [1]`将是`--`,只有`os.Args [2]`将是`readfile.go` (6认同)

Dam*_*oux 9

为了避免获得两次的歧义readfile.go,我建议您使用命名标志。这也将解决问题。

例子:

package main

import (
    "flag"
    "fmt"
)

func main() {
    cmd := flag.String("cmd", "", "")
    flag.Parse()
    fmt.Printf("my cmd: \"%v\"\n", string(*cmd))
}
Run Code Online (Sandbox Code Playgroud)

不要忘记使用flag.Parse()来检索命令行参数

您可以通过这种方式将参数传递给go run命令:go run .\main.go -cmd main.go您将得到输出:

my cmd: "main.go"
Run Code Online (Sandbox Code Playgroud)

我希望这可以帮助其他人。