package flag import ( "flag" "fmt" "os" "strings" ) var flaged = make(map[string]interface{}) func IntNoCase(name string, value int, usage string) *int { test := fmt.Sprintf("--%s=", name) for _, arg := range os.Args { if strings.HasPrefix(strings.ToLower(arg), test) || strings.HasPrefix(strings.ToLower(arg), test[1:]) { kv := strings.Split(arg, "=") realname := strings.TrimLeft(kv[0], "-") oldptr, ok := flaged[realname] if !ok { ptr := flag.Int(realname, value, usage) flaged[realname] = ptr return ptr } return oldptr.(*int) } } defval := new(int) *defval = value return defval } func StringNoCase(name string, value string, usage string) *string { test := fmt.Sprintf("--%s=", name) for _, arg := range os.Args { if strings.HasPrefix(strings.ToLower(arg), test) || strings.HasPrefix(strings.ToLower(arg), test[1:]) { kv := strings.Split(arg, "=") realname := strings.TrimLeft(kv[0], "-") oldptr, ok := flaged[realname] if !ok { ptr := flag.String(realname, value, usage) flaged[realname] = ptr return ptr } return oldptr.(*string) } } defval := new(string) *defval = value return defval }