関連記事
GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ
概要
以下、自分用のメモです。
前にflagパッケージについてのメモをいろいろ書いてたのですが
- Goメモ-454 (flagパッケージ再入門)(01-FlagSet)
- Goメモ-455 (flagパッケージ再入門)(02-Var)
- Goメモ-456 (flagパッケージ再入門)(03-Duration)
- Goメモ-457 (flagパッケージ再入門)(04-Func)
- Goメモ-458 (flagパッケージ再入門)(05-TextVar)
- Goメモ-459 (flagパッケージ再入門)(06-NArgs)
- Goメモ-460 (flagパッケージ再入門)(07-Subcommand)
そういえば、複数回指定できるパラメータの作成についてはメモしていないなと思ったので、メモ残しておくことにしました。
複数回指定可能なパラメータを実現するには、flag.Var() を使います。flag.Valueインターフェースを実装した型を定義してそこに追加していく感じです。
サンプル
main.go
package flags import ( "flag" "fmt" "github.com/devlights/gomy/output" ) type ( varsFlag []string ) func (me *varsFlag) String() string { return fmt.Sprint(*me) } func (me *varsFlag) Set(v string) error { *me = append(*me, v) return nil } var ( // varsFlag は flag.Value を実装している _ flag.Value = (*varsFlag)(nil) ) // Var2 は、flagパッケージのflag.Var()のサンプルです。 // // コマンドライン引数にて同じオプションを複数回指定された場合に対応できる // カスタムフラグを定義して、値を読み取っています。 // // # REFERENCES // - https://pkg.go.dev/flag@go1.24.3 func Var2() error { var ( fs = flag.NewFlagSet("vars", flag.ExitOnError) vars varsFlag ) fs.Var(&vars, "v", "文字列値。複数指定可能。") var ( opts = []string{ "-v", "hello", "-v", "world", "-v", "へろー", "-v", "ワールド", } err error ) err = fs.Parse(opts) if err != nil { return err } var ( ch = make(chan string) ) go func(ch chan<- string, vars []string) { defer close(ch) for _, item := range vars { ch <- item } }(ch, vars) for item := range ch { output.Stdoutl("[vars]", item) } return nil }
実行
$ task task: [build] go build -o "/workspaces/try-golang/try-golang" . task: [run] ./try-golang -onetime ENTER EXAMPLE NAME: flags_var2 [Name] "flags_var2" [vars] hello [vars] world [vars] へろー [vars] ワールド [Elapsed] 128.76µs
参考情報
Goのおすすめ書籍
過去の記事については、以下のページからご参照下さい。
サンプルコードは、以下の場所で公開しています。





