var timesFlag int
flag.IntVar(×Flag, "times", 1, "Number of times to print")
flag.Parse()
如果我运行程序并输入prog -times = abc(< --- not an int)
fmt.Parse在控制台上吐出这个丑陋的错误消息:
无效值" -abc" for flag -times:strconv.ParseInt:解析" -abc":语法无效
显然,我无法阻止用户从命令行输入任何内容。该错误看起来像垃圾对用户,需要看起来更友好。如何将此错误静音到stderr / stdout并检测是否生成了错误?
答案 0 :(得分:1)
flag.CommandLine
类型的FlagSet
变量用于处理命令行参数,如果您使用的flag
包的函数不是FlagSet
类型。
您可以使用io.Writer
方法设置输出错误消息的输出(FlagSet.SetOutput()
)。您可以设置bytes.Buffer
,这样消息只会在缓冲区中结束(而不是在控制台上)。请注意,请勿将nil
设置为打印到标准输出(控制台)。
然后自己调用FlagSet.Parse()
,将os.Args[1:]
作为要解析的参数传递。 FlagSet.Parse()
会返回error
,您可以自行处理。