doujiang6944 2015-01-22 15:03
浏览 45
已采纳

Golang标志库:无法覆盖打印命令行用法的用法功能

I am working on a simple command line tool and I found the default Usage message a bit lacking. I want to define my own and I think I am doing it right I am referring to this example.

I commented out most of the code I had written so the file containing the main function now looks like this:

package main

import (
    "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")
    }
}

It seems like this should work, but it doesn't. When running <binary> -h I get the default usage message and not my custom foo bar message that I defined in my custom function. I am using Go version 1.3.3 on OSX. I found this commit but it is for Go 1.4rc2.

What am I doing wrong?

  • 写回答

1条回答 默认 最新

  • douxiongye5779 2015-01-22 15:08
    关注

    Edit:

    Actually revisiting your code it works! What version of Go are you using? Maybe you need to rebuild your code.

    The decision of what Usage function to call is in the flag.go source file, line 708, unexported function usage() (this is from Go 1.4):

    func (f *FlagSet) usage() {
        if f.Usage == nil {
            if f == CommandLine {
                Usage()
            } else {
                defaultUsage(f)
            }
        } else {
            f.Usage()
        }
    }
    

    This tells if the FlagSet.Usage is not nil, it will be called. If it is not called for you, it's most likely you're using a Go version prior to 1.4 (which you confirmed in your comment).

    But since you're using the default flag.CommandLine flagset, you can simply write:

    // Note "flag.Usage" instead of "f.Usage"
    
    flag.Usage = func() {
        fmt.Println("foo bar")
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?