code: func (f *FlagSet) VarP(value Value, name, shorthand, usage string) {
  	// Remember the default value as a string; it won't change.
  	flag := &Flag{name, shorthand, usage, value, value.String()}
  	_, alreadythere := f.formal[name]
  	if alreadythere {
  		msg := fmt.Sprintf("%s flag redefined: %s", f.name, name)
  		fmt.Fprintln(f.out(), msg)
  		panic(msg) // Happens only if flags are declared with identical names
  	}
  	if f.formal == nil {
  		f.formal = make(map[string]*Flag)
  	}
  	f.formal[name] = flag
  
  	if len(shorthand) == 0 {
  		return
  	}
  	if len(shorthand) > 1 {
  		fmt.Fprintf(f.out(), "%s shorthand more than ASCII character: %s\n", f.name, shorthand)
  		panic("shorthand is more than one character")
  	}
  	if f.shorthands == nil {
  		f.shorthands = make(map[byte]*Flag)
  	}
  	c := shorthand[0]
  	old, alreadythere := f.shorthands[c]
  	if alreadythere {
  		fmt.Fprintf(f.out(), "%s shorthand reused: %q for %s already used for %s\n", f.name, c, name, old.Name)
  		panic("shorthand redefinition")
  	}
  	f.shorthands[c] = flag
  }
docs: // Like Var, but accepts a shorthand letter that can be used after a single dash.