code: func (v IPPortVar) Set(s string) error {
  	if len(s) == 0 {
  		v.Val = nil
  		return nil
  	}
  
  	if v.Val == nil {
  		// it's okay to panic here since this is programmer error
  		panic("the string pointer passed into IPPortVar should not be nil")
  	}
  
  	// Both IP and IP:port are valid.
  	// Attempt to parse into IP first.
  	if net.ParseIP(s) != nil {
  		*v.Val = s
  		return nil
  	}
  
  	// Can not parse into IP, now assume IP:port.
  	host, port, err := net.SplitHostPort(s)
  	if err != nil {
  		return fmt.Errorf("%q is not in a valid format (ip or ip:port): %v", s, err)
  	}
  	if net.ParseIP(host) == nil {
  		return fmt.Errorf("%q is not a valid IP address", host)
  	}
  	if _, err := strconv.Atoi(port); err != nil {
  		return fmt.Errorf("%q is not a valid number", port)
  	}
  	*v.Val = s
  	return nil
  }
docs: // Set sets the flag value