隐藏标志的默认值

Go provides easy CLI switches aka flags.

var debug = flag.Bool("debug", false, "enable debugging")
var hostname = flag.String("hostname", "127.0.0.1", "hostname")
flag.Parse()

As expected this yields

> ./program -h
Usage:
    -debug
          enable debugging
    -hostname string
          hostname (default "127.0.0.1")

I would like to hide the (default "127.0.0.1") part of specific flags.

Searching on SO and around suggested use of flag.FlagSet.

var shown flag.FlagSet
var hidden flag.FlagSet
var debug = shown.Bool("debug", false, "enable debugging")
var hostname = hidden.String("hostname", "127.0.0.1", "hostname")
flag.Usage = func() {
    shown.PrintDefaults()
}
flag.Parse()
//shown.Parse(os.Args[0:]) // tried to solve "flag provided but not defined"

Output part shows only "debug" flag, however this breaks actual flag usage.

> ./program -debug
flag provided but not defined: -debug
Usage of ./program:
    -debug
          enable debugging

And this is not ideal either, since I would like to see the available flag, just hide the default value.

Desired output:

> ./program -h
Usage:
    -debug
          enable debugging
    -hostname string
          hostname

Best solution so far is the one Eugene proposed. Thanks!

var debug = flag.Bool("debug", false, "enable debugging")
var hostname = flag.String("hostname", "", "hostname")
flag.Parse()

defaultHostname := "127.0.0.1"

if *hostname == "" {
    *hostname = defaultHostname
}