File tree Expand file tree Collapse file tree 3 files changed +73
-0
lines changed Expand file tree Collapse file tree 3 files changed +73
-0
lines changed Original file line number Diff line number Diff line change 6
6
| ------------- | ---------------- | ----------------------------------------------------------------- |
7
7
| flagset.go | flags_flagset | flag.Flagset のサンプルです |
8
8
| var.go | flags_var | flag.Var() のサンプルです |
9
+ | var2.go | flags_var2 | flag.Var() のサンプルです。(2) 同じオプションを複数回指定。 |
9
10
| int.go | flags_int | flag.Int(), flag.IntVar() のサンプルです |
10
11
| bool.go | flags_bool | flag.Bool(), flag.BoolVar() のサンプルです |
11
12
| string.go | flags_string | flag.String(), flag.StringVar() のサンプルです |
Original file line number Diff line number Diff line change @@ -15,6 +15,7 @@ func NewRegister() mapping.Register {
15
15
func (r * register ) Regist (m mapping.ExampleMapping ) {
16
16
m ["flags_flagset" ] = Flagset
17
17
m ["flags_var" ] = Var
18
+ m ["flags_var2" ] = Var2
18
19
m ["flags_int" ] = Int
19
20
m ["flags_bool" ] = Bool
20
21
m ["flags_string" ] = String
Original file line number Diff line number Diff line change
1
+ package flags
2
+
3
+ import (
4
+ "flag"
5
+ "fmt"
6
+
7
+ "github.com/devlights/gomy/output"
8
+ )
9
+
10
+ type (
11
+ varsFlag []string
12
+ )
13
+
14
+ func (me * varsFlag ) String () string {
15
+ return fmt .Sprint (* me )
16
+ }
17
+
18
+ func (me * varsFlag ) Set (v string ) error {
19
+ * me = append (* me , v )
20
+ return nil
21
+ }
22
+
23
+ var (
24
+ // varsFlag は flag.Value を実装している
25
+ _ flag.Value = (* varsFlag )(nil )
26
+ )
27
+
28
+ // Var2 は、flagパッケージのflag.Var()のサンプルです。
29
+ //
30
+ // コマンドライン引数にて同じオプションを複数回指定された場合に対応できる
31
+ // カスタムフラグを定義して、値を読み取っています。
32
+ //
33
+ // # REFERENCES
34
+ // - https://pkg.go.dev/flag@go1.24.3
35
+ func Var2 () error {
36
+ var (
37
+ fs = flag .NewFlagSet ("vars" , flag .ExitOnError )
38
+ vars varsFlag
39
+ )
40
+ fs .Var (& vars , "v" , "文字列値。複数指定可能。" )
41
+
42
+ var (
43
+ opts = []string {
44
+ "-v" , "hello" ,
45
+ "-v" , "world" ,
46
+ "-v" , "へろー" ,
47
+ "-v" , "ワールド" ,
48
+ }
49
+ err error
50
+ )
51
+ err = fs .Parse (opts )
52
+ if err != nil {
53
+ return err
54
+ }
55
+
56
+ var (
57
+ ch = make (chan string )
58
+ )
59
+ go func (ch chan <- string , vars []string ) {
60
+ defer close (ch )
61
+ for _ , item := range vars {
62
+ ch <- item
63
+ }
64
+ }(ch , vars )
65
+
66
+ for item := range ch {
67
+ output .Stdoutl ("[vars]" , item )
68
+ }
69
+
70
+ return nil
71
+ }
You can’t perform that action at this time.
0 commit comments