我有一个使用包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
,如何删除其他设置?
答案 0 :(得分:1)
您需要使用新的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
的第二个参数是错误处理。有关详细信息,请参阅here。
当您直接呼叫flag.someMethod()
时,它会使用默认的共享标记集。如果你创建一个新的,它将是空的。