code: func (fs *FlagSet) Var(value Value, names []string, usage string) {
  	// Remember the default value as a string; it won't change.
  	flag := &Flag{names, usage, value, value.String()}
  	for _, name := range names {
  		name = strings.TrimPrefix(name, "#")
  		_, alreadythere := fs.formal[name]
  		if alreadythere {
  			var msg string
  			if fs.name == "" {
  				msg = fmt.Sprintf("flag redefined: %s", name)
  			} else {
  				msg = fmt.Sprintf("%s flag redefined: %s", fs.name, name)
  			}
  			fmt.Fprintln(fs.Out(), msg)
  			panic(msg) // Happens only if flags are declared with identical names
  		}
  		if fs.formal == nil {
  			fs.formal = make(map[string]*Flag)
  		}
  		fs.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.