Quantcast
Channel: プログラミング
Viewing all articles
Browse latest Browse all 7910

Goメモ-430 (flaggyメモ)(03) - いろいろ備忘録日記

$
0
0

関連記事

devlights.hatenablog.com

devlights.hatenablog.com

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"}}}

サンプルは以下にアップしてあります。

try-golang-extlib/examples/singleapp/flaggy/03.nested-subcommand at main · devlights/try-golang-extlib · GitHub

参考情報

ericgreer.info

Goのおすすめ書籍


過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。


Viewing all articles
Browse latest Browse all 7910

Trending Articles