我正在开发一个简单的命令行工具,但我发现默认的 Usage 消息有点缺乏。我想定义我自己的,我认为我做对了我指的是这个例子。我注释掉了我编写的大部分代码,因此包含 main 函数的文件现在看起来像这样:package mainimport ( "flag" "fmt" "os")func main() { // set the custom Usage function setupFlags(flag.CommandLine) // define flags... // then parse flags flag.Parse() // custom code that uses flag values...}func setupFlags(f *flag.FlagSet) { f.Usage = func() { fmt.Println("foo bar") }}看起来这应该有效,但事实并非如此。运行时,<binary> -h我收到默认使用消息,而不是我foo bar在自定义函数中定义的自定义消息。我在 OSX 上使用 Go 1.3.3 版。我找到了这个提交,但它是针对 Go 1.4rc2 的。我究竟做错了什么?
1 回答
largeQ
TA贡献2039条经验 获得超7个赞
编辑:
实际上重新访问您的代码它有效!你用的是什么版本的Go?也许你需要重建你的代码。
Usage调用哪个函数的决定在flag.go源文件中,第 708 行,未导出的函数usage()(来自 Go 1.4):
func (f *FlagSet) usage() {
if f.Usage == nil {
if f == CommandLine {
Usage()
} else {
defaultUsage(f)
}
} else {
f.Usage()
}
}
这告诉如果FlagSet.Usage不是nil,它将被调用。如果没有为您调用它,很可能您使用的是 1.4 之前的 Go 版本(您在评论中确认了这一点)。
但是由于您使用的是默认flag.CommandLine标志集,您可以简单地编写:
// Note "flag.Usage" instead of "f.Usage"
flag.Usage = func() {
fmt.Println("foo bar")
}
- 1 回答
- 0 关注
- 169 浏览
添加回答
举报
0/150
提交
取消