9 // -- stringSlice Value
10 type stringSliceValue struct {
15 func newStringSliceValue(val []string, p *[]string) *stringSliceValue {
16 ssv := new(stringSliceValue)
22 func readAsCSV(val string) ([]string, error) {
24 return []string{}, nil
26 stringReader := strings.NewReader(val)
27 csvReader := csv.NewReader(stringReader)
28 return csvReader.Read()
31 func writeAsCSV(vals []string) (string, error) {
39 return strings.TrimSuffix(b.String(), "\n"), nil
42 func (s *stringSliceValue) Set(val string) error {
43 v, err := readAsCSV(val)
50 *s.value = append(*s.value, v...)
56 func (s *stringSliceValue) Type() string {
60 func (s *stringSliceValue) String() string {
61 str, _ := writeAsCSV(*s.value)
62 return "[" + str + "]"
65 func stringSliceConv(sval string) (interface{}, error) {
66 sval = sval[1 : len(sval)-1]
67 // An empty string would cause a slice with one (empty) string
69 return []string{}, nil
71 return readAsCSV(sval)
74 // GetStringSlice return the []string value of a flag with the given name
75 func (f *FlagSet) GetStringSlice(name string) ([]string, error) {
76 val, err := f.getFlagType(name, "stringSlice", stringSliceConv)
78 return []string{}, err
80 return val.([]string), nil
83 // StringSliceVar defines a string flag with specified name, default value, and usage string.
84 // The argument p points to a []string variable in which to store the value of the flag.
85 func (f *FlagSet) StringSliceVar(p *[]string, name string, value []string, usage string) {
86 f.VarP(newStringSliceValue(value, p), name, "", usage)
89 // StringSliceVarP is like StringSliceVar, but accepts a shorthand letter that can be used after a single dash.
90 func (f *FlagSet) StringSliceVarP(p *[]string, name, shorthand string, value []string, usage string) {
91 f.VarP(newStringSliceValue(value, p), name, shorthand, usage)
94 // StringSliceVar defines a string flag with specified name, default value, and usage string.
95 // The argument p points to a []string variable in which to store the value of the flag.
96 func StringSliceVar(p *[]string, name string, value []string, usage string) {
97 CommandLine.VarP(newStringSliceValue(value, p), name, "", usage)
100 // StringSliceVarP is like StringSliceVar, but accepts a shorthand letter that can be used after a single dash.
101 func StringSliceVarP(p *[]string, name, shorthand string, value []string, usage string) {
102 CommandLine.VarP(newStringSliceValue(value, p), name, shorthand, usage)
105 // StringSlice defines a string flag with specified name, default value, and usage string.
106 // The return value is the address of a []string variable that stores the value of the flag.
107 func (f *FlagSet) StringSlice(name string, value []string, usage string) *[]string {
109 f.StringSliceVarP(&p, name, "", value, usage)
113 // StringSliceP is like StringSlice, but accepts a shorthand letter that can be used after a single dash.
114 func (f *FlagSet) StringSliceP(name, shorthand string, value []string, usage string) *[]string {
116 f.StringSliceVarP(&p, name, shorthand, value, usage)
120 // StringSlice defines a string flag with specified name, default value, and usage string.
121 // The return value is the address of a []string variable that stores the value of the flag.
122 func StringSlice(name string, value []string, usage string) *[]string {
123 return CommandLine.StringSliceP(name, "", value, usage)
126 // StringSliceP is like StringSlice, but accepts a shorthand letter that can be used after a single dash.
127 func StringSliceP(name, shorthand string, value []string, usage string) *[]string {
128 return CommandLine.StringSliceP(name, shorthand, value, usage)