为了账号安全,请及时绑定邮箱和手机立即绑定

如何迭代命令行参数并收集标志后剩下的内容?

如何迭代命令行参数并收集标志后剩下的内容?

Go
泛舟湖上清波郎朗 2023-07-31 17:14:03
我的目标是让“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)。

或者您可以使用另一个包。


查看完整回答
反对 回复 2023-07-31
  • 1 回答
  • 0 关注
  • 93 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信