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