Skip to content

Commit 7b66129

Browse files
authored
Merge pull request #824 from devlights/add-flag-var-example
2 parents 09cd0d5 + cc9bc20 commit 7b66129

File tree

3 files changed

+74
-0
lines changed

3 files changed

+74
-0
lines changed

examples/basic/flags/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,5 @@
55
| file | example name | note |
66
| ---------- | ------------- | ---------------------------- |
77
| flagset.go | flags_flagset | flag.Flagset のサンプルです. |
8+
| var.go | flags_var | flag.Var() のサンプルです。 |
89
| | | |

examples/basic/flags/examples.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,5 @@ func NewRegister() mapping.Register {
1414
// Regist -- 登録します.
1515
func (r *register) Regist(m mapping.ExampleMapping) {
1616
m["flags_flagset"] = Flagset
17+
m["flags_var"] = Var
1718
}

examples/basic/flags/var.go

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
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

Comments
 (0)