繁星coding
正如已经提到的,该flag包不直接提供这个功能,通常你可以(也应该)能够提供一个合理的默认。对于您只需要少量显式参数(例如输入和输出文件名)的情况,您可以使用位置参数(例如在flag.Parse()检查flag.NArg()==2之后然后input, output := flag.Arg(0), flag.Arg(1))。但是,如果您遇到这种情况不合理的情况;说几个你想以任何顺序接受的整数标志,其中任何整数值都是合理的,但没有默认值。然后您可以使用该flag.Visit函数来检查您关心的标志是否已显式设置。我认为这是判断标志是否明确设置为其默认值的唯一方法(不包括具有保持状态flag.Value的Set实现的自定义类型)。例如,也许是这样的: required := []string{"b", "s"} flag.Parse() seen := make(map[string]bool) flag.Visit(func(f *flag.Flag) { seen[f.Name] = true }) for _, req := range required { if !seen[req] { // or possibly use `log.Fatalf` instead of: fmt.Fprintf(os.Stderr, "missing required -%s argument/flag\n", req) os.Exit(2) // the same exit code flag.Parse uses } }Playground如果未明确设置“-b”或“-s”标志,这将产生错误。