在解析错误上控制fmt.Parse输出

时间:2015-02-09 00:32:14

标签: go

var timesFlag int  
flag.IntVar(&timesFlag, "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并检测是否生成了错误?

1 个答案:

答案 0 :(得分:1)

flag.CommandLine类型的FlagSet 变量用于处理命令行参数,如果您使用的flag包的函数不是FlagSet类型。

您可以使用io.Writer方法设置输出错误消息的输出(FlagSet.SetOutput())。您可以设置bytes.Buffer,这样消息只会在缓冲区中结束(而不是在控制台上)。请注意,请勿将nil设置为打印到标准输出(控制台)。

然后自己调用FlagSet.Parse(),将os.Args[1:]作为要解析的参数传递。 FlagSet.Parse()会返回error,您可以自行处理。