|
| 1 | +package flags |
| 2 | + |
| 3 | +import ( |
| 4 | + "flag" |
| 5 | + "strings" |
| 6 | + |
| 7 | + "github.com/devlights/gomy/output" |
| 8 | +) |
| 9 | + |
| 10 | +type ( |
| 11 | + // flag.Var() で指定するホスト名リスト。カンマ区切り。 |
| 12 | + hosts []string |
| 13 | + // flag.Var() で指定するパスリスト。コロン区切り。 |
| 14 | + paths []string |
| 15 | +) |
| 16 | + |
| 17 | +func (h hosts) String() string { |
| 18 | + output.Stderrl("[CALL]", "flag.Value.String()") |
| 19 | + |
| 20 | + return strings.Join(h, ",") |
| 21 | +} |
| 22 | + |
| 23 | +func (h *hosts) Set(v string) error { |
| 24 | + output.Stderrl("[CALL]", "flag.Value.Set()") |
| 25 | + |
| 26 | + *h = strings.Split(v, ",") |
| 27 | + return nil |
| 28 | +} |
| 29 | + |
| 30 | +func (p paths) String() string { |
| 31 | + return strings.Join(p, ":") |
| 32 | +} |
| 33 | + |
| 34 | +func (p *paths) Set(v string) error { |
| 35 | + *p = strings.Split(v, ":") |
| 36 | + return nil |
| 37 | +} |
| 38 | + |
| 39 | +// Var は、flag.Var() のサンプルです。 |
| 40 | +// |
| 41 | +// flag.Var() には、任意の値をフラグハンドリングのための値として指定出来ます。 |
| 42 | +// 条件として、flag.Valueインターフェースを実装している必要があります。 |
| 43 | +// |
| 44 | +// # REFERENCES |
| 45 | +// - https://pkg.go.dev/flag@go1.22.4#Var |
| 46 | +// - https://pkg.go.dev/flag@go1.22.4#Value |
| 47 | +func Var() error { |
| 48 | + var ( |
| 49 | + hs hosts |
| 50 | + ps paths |
| 51 | + fs = flag.NewFlagSet("", flag.ExitOnError) |
| 52 | + logfn = func(message string, fn func()) { |
| 53 | + output.Stderrl("[CALL]", message) |
| 54 | + fn() |
| 55 | + } |
| 56 | + ) |
| 57 | + |
| 58 | + logfn("fs.Var", func() { fs.Var(&hs, "hosts", "host names. comma separated.") }) |
| 59 | + fs.Var(&ps, "paths", "path list. coron separated.") |
| 60 | + |
| 61 | + logfn("fs.Parse", func() { fs.Parse([]string{"-hosts", "a.com,b.com,c.com", "-paths", "/path/to/a:/bin:/usr/bin"}) }) |
| 62 | + |
| 63 | + for _, h := range hs { |
| 64 | + output.Stdoutl("[h]", h) |
| 65 | + } |
| 66 | + |
| 67 | + for _, p := range ps { |
| 68 | + output.Stdoutl("[p]", p) |
| 69 | + } |
| 70 | + |
| 71 | + return nil |
| 72 | +} |
0 commit comments