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

时间:2017-07-15 11:52:34

标签: 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”

2 个答案:

答案 0 :(得分:12)

您可以使用--将gofiles与参数分开:

go run readfile.go -- readfile.go

答案 1 :(得分:2)

为避免产生两次readfile.go的歧义,我建议您使用命名的flags。这样也可以解决问题。

示例:

package main

import (
    "flag"
    "fmt"
)

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

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

您可以通过以下方式将args传递给go run命令:go run .\main.go -cmd main.go,然后将得到输出:

my cmd: "main.go"

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