对于一个Golang开发者来说,牢固扎实的基础是十分重要的,编程网就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《如何迭代命令行参数并收集标志后剩下的内容?》,主要介绍了,希望对大家的知识积累有所帮助,快点收藏起来吧,否则需要时就找不到了!
问题内容我的目标是让“init”、“init -site=test”、两个版本的 init 以及独立的“debug”命令在命令行上被接受,并将剩下的任何内容视为文件名。
实际发生的情况是,在“init -site=test”的情况下,由于某种原因,“-site=test”也被接受为文件名。我怎样才能阻止这种情况发生?
package main
import (
"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);
}
}
}
解决方案
使用flag
包不太方便。来自doc:
标志解析在第一个非标志参数(“-”是非标志参数)之前或终止符“--”之后停止。
您必须手动执行此操作:
解析后,标志后面的参数可用作切片 flag.Args() 或单独用作 flag.Arg(i)。
或者您可以使用另一个包。
终于介绍完啦!小伙伴们,这篇关于《如何迭代命令行参数并收集标志后剩下的内容?》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~编程网公众号也会发布Golang相关知识,快来关注吧!