Skip to content

Commit 2eff125

Browse files
authored
Merge pull request #929 from devlights/add-flag-pkg-var2-example
2 parents 9b72db0 + c651acf commit 2eff125

File tree

3 files changed

+73
-0
lines changed

3 files changed

+73
-0
lines changed

examples/basic/flags/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
| ------------- | ---------------- | ----------------------------------------------------------------- |
77
| flagset.go | flags_flagset | flag.Flagset のサンプルです |
88
| var.go | flags_var | flag.Var() のサンプルです |
9+
| var2.go | flags_var2 | flag.Var() のサンプルです。(2) 同じオプションを複数回指定。 |
910
| int.go | flags_int | flag.Int(), flag.IntVar() のサンプルです |
1011
| bool.go | flags_bool | flag.Bool(), flag.BoolVar() のサンプルです |
1112
| string.go | flags_string | flag.String(), flag.StringVar() のサンプルです |

examples/basic/flags/examples.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ func NewRegister() mapping.Register {
1515
func (r *register) Regist(m mapping.ExampleMapping) {
1616
m["flags_flagset"] = Flagset
1717
m["flags_var"] = Var
18+
m["flags_var2"] = Var2
1819
m["flags_int"] = Int
1920
m["flags_bool"] = Bool
2021
m["flags_string"] = String

examples/basic/flags/var2.go

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

0 commit comments

Comments
 (0)