我的目標是讓“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 關注
- 129 瀏覽
添加回答
舉報
0/150
提交
取消