func (opt *Option) SetRequired(msg string) *Option {
	opt.IsRequired = true
	opt.IsRequiredErr = msg
	return opt
}
SetRequired - Marks an option as required.
package option
import (
	"fmt"
	"io/ioutil"
	"log"
	"sort"
	"strconv"
	"strings"
	"github.com/DavidGamba/go-getoptions/text"
)
var Debug = log.New(ioutil.Discard, "DEBUG: ", log.Ldate|log.Ltime|log.Lshortfile)
type Handler func(optName string, argument string, usedAlias string) error
type Type int
const (
	BoolType Type = iota
	StringType
	IntType
	Float64Type
	StringRepeatType
	IntRepeatType
	StringMapType
)
type Option struct {
	Name           string
	Aliases        []string
	Called         bool     
	UsedAlias      string   
	Handler        Handler  
	IsOptional     bool     
	MapKeysToLower bool     
	OptType        Type     
	MinArgs        int      
	MaxArgs        int      
	IsRequired    bool    
	IsRequiredErr string  
	IsPassedToCommand bool  
	DefaultStr   string  
	Description  string  
	HelpArgName  string  
	HelpSynopsis string  
	value    interface{}         
	pBool    *bool               
	pString  *string             
	pInt     *int                
	pFloat64 *float64            
	pStringS *[]string           
	pIntS    *[]int              
	pStringM *map[string]string  
}
func New(name string, optType Type) *Option {
	opt := &Option{
		Name:    name,
		OptType: optType,
		Aliases: []string{name},
	}
	switch optType {
	case StringType, StringRepeatType:
		opt.HelpArgName = "string"
	case IntType, IntRepeatType:
		opt.HelpArgName = "int"
	case Float64Type:
		opt.HelpArgName = "float64"
	case StringMapType:
		opt.HelpArgName = "key=value"
	}
	opt.synopsis()
	return opt
}
func (opt *Option) synopsis() {
	aliases := []string{}
	for _, e := range opt.Aliases {
		if len(e) > 1 {
			e = "--" + e
		} else {
			e = "-" + e
		}
		aliases = append(aliases, e)
	}
	opt.HelpSynopsis = strings.Join(aliases, "|")
	if opt.OptType != BoolType {
		opt.HelpSynopsis = fmt.Sprintf("%s <%s>", opt.HelpSynopsis, opt.HelpArgName)
	}
	if opt.MaxArgs > 1 {
		opt.HelpSynopsis = opt.HelpSynopsis + "..."
	}
}
func (opt *Option) Value() interface{} {
	return opt.value
}
func (opt *Option) SetAlias(alias ...string) *Option {
	opt.Aliases = append(opt.Aliases, alias...)
	opt.synopsis()
	return opt
}
func (opt *Option) SetDescription(s string) *Option {
	opt.Description = s
	return opt
}
func (opt *Option) SetHelpArgName(s string) *Option {
	opt.HelpArgName = s
	opt.synopsis()
	return opt
}
func (opt *Option) SetDefaultStr(s string) *Option {
	opt.DefaultStr = s
	return opt
}