code: func (f *FlagSet) Var(value Value, name string, usage string) {
  	// Remember the default value as a string; it won't change.
  	flag := &Flag{name, usage, value, value.String()}
  	_, alreadythere := f.formal[name]
  	if alreadythere {
  		var msg string
  		if f.name == "" {
  			msg = fmt.Sprintf("flag redefined: %s", name)
  		} else {
  			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
  }
docs: // Var defines a flag with the specified name and usage string. The type and
  // value of the flag are represented by the first argument, of type Value, which
  // typically holds a user-defined implementation of Value. For instance, the
  // caller could create a flag that turns a comma-separated string into a slice
  // of strings by giving the slice the methods of Value; in particular, Set would
  // decompose the comma-separated string into the slice.