package main import ( "flag" "fmt" "strings" ) // StringSlice 支持重复传参的字符串切片类型 type StringSlice []string // Set 实现参数追加逻辑,覆盖原生覆盖问题 func (s *StringSlice) Set(value string) error { *s = append(*s, value) return nil } // String 实现字符串展示与零值返回 func (s *StringSlice) String() string { if len(*s) == 0 { return "[]" } return strings.Join(*s, ",") } // Get 实现Getter接口,返回原始切片类型 func (s *StringSlice) Get() any { return []string(*s) } func main() { var files StringSlice var tags StringSlice flag.Var(&files, "file", "指定配置文件,可重复传参") flag.Var(&tags, "tag", "自定义业务标签,可重复传参") flag.Parse() fmt.Printf("文件列表:%v (原始类型:%T)\n", files.Get(), files.Get()) fmt.Printf("标签列表:%v (原始类型:%T)\n", tags.Get(), tags.Get()) }