関連記事
Windows Terminal上でNushellを使うとプロンプトがチカチカ(blink) する件 - いろいろ備忘録日記
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) - いろいろ備忘録日記
GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ
概要
以下、自分用のメモです。忘れないうちにメモメモ。。。
最近、flaggy とかを利用していて、あまりflagパッケージを触らなくなってきているのですが
小さなツールをちゃちゃっとワンタイムで利用するときは、やっぱり使ったりします。
使っていないと忘れてしまいそうなので、ここに自分の備忘録として残しておこうと思います。
今回は、サブコマンドについて。
flagパッケージを使って、サブコマンドを実現する場合はflag.FlagSetでそれぞれのサブコマンドを表現します。
サブコマンドの数が多い場合や細かな制御などをしたい場合は、flaggy などの外部ライブラリを利用する方が楽です。
サンプル
package flags import ( "flag" "fmt" ) // Subcommand は、flagパッケージを使ってサブコマンドを実現するサンプルです. // // flagパッケージを使って、サブコマンドを実現する場合は // flag.FlagSetでそれぞれのサブコマンドを表現する。 // // サブコマンドの数が多い場合や細かな制御などをしたい場合は // [flaggy](https://github.com/integrii/flaggy) などの外部ライブラリを利用する方が楽。 // // flaggyのサンプルについては [try-golang-extlib](https://github.com/devlights/try-golang-extlib/tree/main/examples/singleapp/flaggy) を参照。 // // # REFERENCES // - https://oohira.github.io/gobyexample-jp/command-line-subcommands.html // - https://pkg.go.dev/flag // - https://github.com/integrii/flaggy func Subcommand() error { var ( sub1 = flag.NewFlagSet("sub1", flag.ExitOnError) // サブコマンド sub2 = flag.NewFlagSet("sub2", flag.ExitOnError) // サブコマンド sub1BoolVal bool sub2IntVal int ) sub1.BoolVar(&sub1BoolVal, "enable", false, "bool flag") sub2.IntVar(&sub2IntVal, "value", 0, "int flag") // // 引数の1つ目がサブコマンドとなるので、それで振り分け // var ( argsList = [][]string{ {"sub1"}, {"sub2"}, {"sub1", "-enable"}, {"sub2", "-value", "100"}, } ) for _, args := range argsList { switch args[0] { case "sub1": sub1.Parse(args[1:]) fmt.Printf("[sub1] enable=%v\n", sub1BoolVal) case "sub2": sub2.Parse(args[1:]) fmt.Printf("[sub2] value=%v\n", sub2IntVal) } } return nil /* $ task task: [build] go build . task: [run] ./try-golang -onetime ENTER EXAMPLE NAME: flags_subcommand [Name] "flags_subcommand" [sub1] enable=false [sub2] value=0 [sub1] enable=true [sub2] value=100 [Elapsed] 37.48µs */ }
参考情報
Goメモ-428 (flaggyメモ)(01) - いろいろ備忘録日記
Goメモ-429 (flaggyメモ)(02) - いろいろ備忘録日記
Goメモ-430 (flaggyメモ)(03) - いろいろ備忘録日記
Goのおすすめ書籍
過去の記事については、以下のページからご参照下さい。
サンプルコードは、以下の場所で公開しています。