1package pflag 2 3// -- stringArray Value 4type stringArrayValue struct { 5 value *[]string 6 changed bool 7} 8 9func newStringArrayValue(val []string, p *[]string) *stringArrayValue { 10 ssv := new(stringArrayValue) 11 ssv.value = p 12 *ssv.value = val 13 return ssv 14} 15 16func (s *stringArrayValue) Set(val string) error { 17 if !s.changed { 18 *s.value = []string{val} 19 s.changed = true 20 } else { 21 *s.value = append(*s.value, val) 22 } 23 return nil 24} 25 26func (s *stringArrayValue) Append(val string) error { 27 *s.value = append(*s.value, val) 28 return nil 29} 30 31func (s *stringArrayValue) Replace(val []string) error { 32 out := make([]string, len(val)) 33 for i, d := range val { 34 var err error 35 out[i] = d 36 if err != nil { 37 return err 38 } 39 } 40 *s.value = out 41 return nil 42} 43 44func (s *stringArrayValue) GetSlice() []string { 45 out := make([]string, len(*s.value)) 46 for i, d := range *s.value { 47 out[i] = d 48 } 49 return out 50} 51 52func (s *stringArrayValue) Type() string { 53 return "stringArray" 54} 55 56func (s *stringArrayValue) String() string { 57 str, _ := writeAsCSV(*s.value) 58 return "[" + str + "]" 59} 60 61func stringArrayConv(sval string) (interface{}, error) { 62 sval = sval[1 : len(sval)-1] 63 // An empty string would cause a array with one (empty) string 64 if len(sval) == 0 { 65 return []string{}, nil 66 } 67 return readAsCSV(sval) 68} 69 70// GetStringArray return the []string value of a flag with the given name 71func (f *FlagSet) GetStringArray(name string) ([]string, error) { 72 val, err := f.getFlagType(name, "stringArray", stringArrayConv) 73 if err != nil { 74 return []string{}, err 75 } 76 return val.([]string), nil 77} 78 79// StringArrayVar defines a string flag with specified name, default value, and usage string. 80// The argument p points to a []string variable in which to store the values of the multiple flags. 81// The value of each argument will not try to be separated by comma. Use a StringSlice for that. 82func (f *FlagSet) StringArrayVar(p *[]string, name string, value []string, usage string) { 83 f.VarP(newStringArrayValue(value, p), name, "", usage) 84} 85 86// StringArrayVarP is like StringArrayVar, but accepts a shorthand letter that can be used after a single dash. 87func (f *FlagSet) StringArrayVarP(p *[]string, name, shorthand string, value []string, usage string) { 88 f.VarP(newStringArrayValue(value, p), name, shorthand, usage) 89} 90 91// StringArrayVar defines a string flag with specified name, default value, and usage string. 92// The argument p points to a []string variable in which to store the value of the flag. 93// The value of each argument will not try to be separated by comma. Use a StringSlice for that. 94func StringArrayVar(p *[]string, name string, value []string, usage string) { 95 CommandLine.VarP(newStringArrayValue(value, p), name, "", usage) 96} 97 98// StringArrayVarP is like StringArrayVar, but accepts a shorthand letter that can be used after a single dash. 99func StringArrayVarP(p *[]string, name, shorthand string, value []string, usage string) { 100 CommandLine.VarP(newStringArrayValue(value, p), name, shorthand, usage) 101} 102 103// StringArray defines a string flag with specified name, default value, and usage string. 104// The return value is the address of a []string variable that stores the value of the flag. 105// The value of each argument will not try to be separated by comma. Use a StringSlice for that. 106func (f *FlagSet) StringArray(name string, value []string, usage string) *[]string { 107 p := []string{} 108 f.StringArrayVarP(&p, name, "", value, usage) 109 return &p 110} 111 112// StringArrayP is like StringArray, but accepts a shorthand letter that can be used after a single dash. 113func (f *FlagSet) StringArrayP(name, shorthand string, value []string, usage string) *[]string { 114 p := []string{} 115 f.StringArrayVarP(&p, name, shorthand, value, usage) 116 return &p 117} 118 119// StringArray defines a string flag with specified name, default value, and usage string. 120// The return value is the address of a []string variable that stores the value of the flag. 121// The value of each argument will not try to be separated by comma. Use a StringSlice for that. 122func StringArray(name string, value []string, usage string) *[]string { 123 return CommandLine.StringArrayP(name, "", value, usage) 124} 125 126// StringArrayP is like StringArray, but accepts a shorthand letter that can be used after a single dash. 127func StringArrayP(name, shorthand string, value []string, usage string) *[]string { 128 return CommandLine.StringArrayP(name, shorthand, value, usage) 129} 130