2017-07-17 56 views
1

如何确保每个标志参数都是从命令行设置的?我想这样做,而不是专门检查每个标志名称,而是想动态地检查所有标志。检查是否设置了所有标志(没有标志空白)

这里是我的代码,main.go

package main 

import (
    "fmt" 
    "flag" 
) 

func main() { 
    x := flag.String("x", "", "x flag") 
    y := flag.String("y", "", "y flag") 
    flag.Parse() 
} 

我运行它,例如,像这样的:go run main.go -x hello

回答

4

这可以通过使用VisitAll功能来实现。

VisitAll按照字典顺序访问命令行标志,为每个命令调用fn。它访问所有的标志,甚至没有设置。

示例代码(flag.Parse()之后添加):

flag.VisitAll(func (f *flag.Flag) { 
    if f.Value.String()=="" { 
     fmt.Println(f.Name, "not set!") 
    } 
})