我有一个使用包标志读取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()
时,它使用默认的共享标志集。如果您创建一个新,它将是空的。