From ed788fd1c7979803e16cde94981e87389ad5098c Mon Sep 17 00:00:00 2001 From: nadoo <287492+nadoo@users.noreply.github.com> Date: Sat, 12 Aug 2017 12:20:25 +0800 Subject: [PATCH] general: use string slice instead of custom arrFlags type. --- main.go | 31 ++++++------------------------- rule.go | 16 ++++++++-------- 2 files changed, 14 insertions(+), 33 deletions(-) diff --git a/main.go b/main.go index 03c6967..59f7717 100644 --- a/main.go +++ b/main.go @@ -19,9 +19,9 @@ var conf struct { Strategy string CheckWebSite string CheckDuration int - Listen arrFlags - Forward arrFlags - RuleFile arrFlags + Listen []string + Forward []string + RuleFile []string } var flag = conflag.New() @@ -108,34 +108,15 @@ func usage() { fmt.Fprintf(os.Stderr, "\n") } -type arrFlags []string - -// implement flag.Value interface -func (i *arrFlags) String() string { - return "" -} - -// implement flag.Value interface -func (i *arrFlags) Set(value string) error { - // for _, v := range *i { - // if v == value { - // return nil - // } - // } - - *i = append(*i, value) - return nil -} - func main() { flag.BoolVar(&conf.Verbose, "verbose", false, "verbose mode") flag.StringVar(&conf.Strategy, "strategy", "rr", "forward strategy, default: rr") flag.StringVar(&conf.CheckWebSite, "checkwebsite", "www.apple.com", "proxy check HTTP(NOT HTTPS) website address, format: HOST[:PORT], default port: 80") flag.IntVar(&conf.CheckDuration, "checkduration", 30, "proxy check duration(seconds)") - flag.Var(&conf.Listen, "listen", "listen url, format: SCHEMA://[USER|METHOD:PASSWORD@][HOST]:PORT") - flag.Var(&conf.Forward, "forward", "forward url, format: SCHEMA://[USER|METHOD:PASSWORD@][HOST]:PORT[,SCHEMA://[USER|METHOD:PASSWORD@][HOST]:PORT]") - flag.Var(&conf.RuleFile, "rulefile", "rule file path") + flag.StringSliceVar(&conf.Listen, "listen", nil, "listen url, format: SCHEMA://[USER|METHOD:PASSWORD@][HOST]:PORT") + flag.StringSliceVar(&conf.Forward, "forward", nil, "forward url, format: SCHEMA://[USER|METHOD:PASSWORD@][HOST]:PORT[,SCHEMA://[USER|METHOD:PASSWORD@][HOST]:PORT]") + flag.StringSliceVar(&conf.RuleFile, "rulefile", nil, "rule file path") flag.Usage = usage err := flag.Parse() diff --git a/rule.go b/rule.go index 060a70e..24c50e7 100644 --- a/rule.go +++ b/rule.go @@ -11,14 +11,14 @@ import ( // ruleForwarder, every ruleForwarder points to a rule file type ruleForwarder struct { - Forward arrFlags + Forward []string Strategy string CheckWebSite string CheckDuration int - Domain arrFlags - IP arrFlags - CIDR arrFlags + Domain []string + IP []string + CIDR []string name string Proxy @@ -29,14 +29,14 @@ func newRuleProxyFromFile(ruleFile string) (*ruleForwarder, error) { p := &ruleForwarder{name: ruleFile} f := conflag.NewFromFile("rule", ruleFile) - f.Var(&p.Forward, "forward", "forward url, format: SCHEMA://[USER|METHOD:PASSWORD@][HOST]:PORT[,SCHEMA://[USER|METHOD:PASSWORD@][HOST]:PORT]") + f.StringSliceVar(&p.Forward, "forward", nil, "forward url, format: SCHEMA://[USER|METHOD:PASSWORD@][HOST]:PORT[,SCHEMA://[USER|METHOD:PASSWORD@][HOST]:PORT]") f.StringVar(&p.Strategy, "strategy", "rr", "forward strategy, default: rr") f.StringVar(&p.CheckWebSite, "checkwebsite", "www.apple.com", "proxy check HTTP(NOT HTTPS) website address, format: HOST[:PORT], default port: 80") f.IntVar(&p.CheckDuration, "checkduration", 30, "proxy check duration(seconds)") - f.Var(&p.Domain, "domain", "domain") - f.Var(&p.IP, "ip", "ip") - f.Var(&p.CIDR, "cidr", "cidr") + f.StringSliceVar(&p.Domain, "domain", nil, "domain") + f.StringSliceVar(&p.IP, "ip", nil, "ip") + f.StringSliceVar(&p.CIDR, "cidr", nil, "cidr") err := f.Parse() if err != nil {