我的目标是让“init”、“init -site=test”、两个版本的 init 以及独立的“debug”命令在命令行上被接受,并将剩下的任何内容视为文件名。实际发生的情况是,在“init -site=test”的情况下,由于某种原因,“-site=test”也被接受为文件名。我怎样才能阻止这种情况发生?package mainimport ( "flag" "fmt" "os")func main() { initCmd := flag.NewFlagSet("init", flag.ExitOnError) initSiteName := initCmd.String("site", "", "Main name for your site") flag.Parse() for pos, cmd := range os.Args { switch cmd { case "debug": fmt.Printf("debug\n") case "init": initCmd.Parse(os.Args[pos+1:]) fmt.Printf("init\n site name:%v\n", *initSiteName) default: fmt.Printf("Filename: %v\n", cmd); } }}
1 回答
呼如林
TA贡献1798条经验 获得超3个赞
使用该包不是很方便flag
。来自文档:
标志解析在第一个非标志参数(“-”是非标志参数)之前或终止符“--”之后停止。
您必须手动执行此操作:
解析后,标志后面的参数可用作切片 flag.Args() 或单独用作 flag.Arg(i)。
或者您可以使用另一个包。
- 1 回答
- 0 关注
- 93 浏览
添加回答
举报
0/150
提交
取消