我有一个'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”
答案 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"
我希望这可以帮助其他人。