関連記事
GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ
概要
以下、自分用のメモです。
前回に引き続き、flaggyのメモです。
今回はネストしたサブコマンドの定義について。
サンプル
package main import ( "log""github.com/integrii/flaggy" ) type ( SubAArgs struct { SubSubA SubSubAArgs } SubSubAArgs struct { Val1 string } Args struct { Val1 int SubA SubAArgs } ) var ( args Args subA *flaggy.Subcommand subsubA *flaggy.Subcommand ) func init() { // ルートレベルのフラグ flaggy.Int(&args.Val1, "d", "val", "value 1") // サブコマンドの作成 subA = flaggy.NewSubcommand("subA") // サブサブコマンドの作成 subsubA = flaggy.NewSubcommand("subsubA") subsubA.String(&args.SubA.SubSubA.Val1, "v1", "val1", "subsubA value 1") // アタッチ subA.AttachSubcommand(subsubA, 1) flaggy.AttachSubcommand(subA, 1) // ヘルプに表示される情報やバージョン情報など subA.Description = "Subcommand A" subsubA.Description = "Nested-Subcommand A" flaggy.SetName("app") flaggy.SetDescription("flaggy sample app") flaggy.SetVersion("v1.0.0") flaggy.Parse() } func main() { log.SetFlags(0) // どのサブコマンドが指定されたかは *flaggy.Subcommand.Used でわかるswitch { case subA.Used: switch { case subsubA.Used: log.Println("subsubA Used") default: log.Println("invalid nested-sub-command") } default: log.Println("No subcommand") } log.Printf("%#v", args) }
実行すると以下のようになります。
$ task task: [show-help] go run . help app - flaggy sample app Usage: app [subA] Subcommands: subA Subcommand A Flags: --version Displays the program version string. -h--help Displays help with available flag, subcommand, and positional value parameters. -d--val value 1(default: 0) task: [show-help] go run . subA help subA - Subcommand A Usage: subA [subsubA] Subcommands: subsubA Nested-Subcommand A Flags: --version Displays the program version string. -h--help Displays help with available flag, subcommand, and positional value parameters. -d--val value 1(default: 0) task: [show-help] go run . subA subsubA help subsubA - Nested-Subcommand A Flags: --version Displays the program version string. -h--help Displays help with available flag, subcommand, and positional value parameters. -v1 --val1 subsubA value 1-d--val value 1(default: 0) task: [run] go run . --val 111 No subcommand main.Args{Val1:111, SubA:main.SubAArgs{SubSubA:main.SubSubAArgs{Val1:""}}} task: [run] go run . subA subsubA -v1 helloworld subsubA Used main.Args{Val1:0, SubA:main.SubAArgs{SubSubA:main.SubSubAArgs{Val1:"helloworld"}}}
サンプルは以下にアップしてあります。
参考情報
Goのおすすめ書籍
過去の記事については、以下のページからご参照下さい。
サンプルコードは、以下の場所で公開しています。