43 lines
921 B
Go
43 lines
921 B
Go
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())
|
|
}
|