如何仅在 go-flag 包中显示当前设置



我有一个使用包标志读取argv(参数(的项目,当没有给出参数时,它将打印默认设置:

func initFlag() {
    path := flag.String("F", "store_server.conf", "config file path")
    v := flag.Bool("V", false, "print version")
    flag.Parse()
    if flag.NFlag() == 0 {
        flag.PrintDefaults()
        os.Exit(0)
    }
    fmt.Println(*path, *v)
}
func main() {
    initFlag() // initialize flag and load configure file
    select{}
}

以下是执行结果:

vinllen@ ~$ go run main.go
  -F string
        config file path (default "store_server.conf")
  -V    print version

但是当我的代码包含其他包(如glog(时,PrintDefaults函数将显示更多设置,包括glog标志:

  -F string
        config file path (default "store_server.conf")
  -V    print version
  -alsologtostderr
        log to standard error as well as files
  -log_backtrace_at value
        when logging hits line file:N, emit a stack trace
  -log_dir string
        If non-empty, write log files in this directory
  -logtostderr
        log to standard error instead of files
  -stderrthreshold value
        logs at or above this threshold go to stderr
  -v value
        log level for V logs
  -vmodule value
        comma-separated list of pattern=N settings for file-filtered logging

我只需要的两个设置是-F-V,如何删除其他设置?

您需要

使用新FlagSet而不是默认:

package main
import (
    "flag"
    "github.com/golang/glog"
    "os"
)
func initFlag() {
    flags := flag.NewFlagSet("myFlagSet", 0)
    path := flags.String("F", "store_server.conf", "config file path")
    v := flags.Bool("V", false, "print version")
    flags.Parse(os.Args[1:])
    if flags.NFlag() == 0 {
        if len(os.Args) == 0 {
            flags.PrintDefaults()
            os.Exit(0)
        }
    }
    glog.Info(*path, *v)
}
func main() {
    initFlag() // initialize flag and load configure file
    select {}
}

NewFlagSet的第二个参数是错误处理。有关更多详细信息,请参阅此处。

直接调用flag.someMethod()时,它使用默认的共享标志集。如果您创建一个新,它将是空的。

相关内容

  • 没有找到相关文章

最新更新