いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

Goメモ-428 (flaggyメモ)(01)

関連記事

GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ

概要

以下、自分用のメモです。

コマンドラインツールを作っていて、サブコマンド付けたいときが結構あります。

標準ライブラリのflagパッケージでも出来ないことは無いのですが面倒です。

有名どころだと cobra とかだと思いますが、個人的にあまり依存関係も無くてシンプルなのが好きです。

んで、ちょっと探してみたところ、以下を発見。

github.com

以下のライブラリであると記載されています。以下、引用。

Sensible and fast command-line flag parsing with excellent support for subcommands and positional values. Flags can be at any position. Flaggy has no required project or package layout like Cobra requires, and no external dependencies!

(サブコマンドと位置引数の優れたサポートで、コマンドラインのフラグを賢明かつ高速に解析します。フラグはどの位置にも置くことができます。Flaggyは、Cobraが必要とするようなプロジェクトやパッケージのレイアウトを必要とせず、外部依存関係もありません!)

ライブラリが必要とする依存関係がとても少ないので、導入し易いです。

個人的にマッチしたので、とても気に入りました。

なので、自分用に忘れない内に使い方をメモメモ。。。

今回は基本的な使い方です。

サンプル

package main

import (
    "log"

    "github.com/integrii/flaggy"
)

type Args struct {
    Val1 string
    Val2 int
    Val3 bool
}

var (
    args Args
)

func init() {
    // ルートレベルのフラグを追加
    flaggy.String(&args.Val1, "v1", "val1", "value 1")
    flaggy.Int(&args.Val2, "", "val2", "value 2")
    flaggy.Bool(&args.Val3, "v3", "", "value 3")

    // ヘルプに表示される情報やバージョン情報など
    flaggy.SetName("app")
    flaggy.SetDescription("flaggy sample app")
    flaggy.SetVersion("v1.0.0")

    flaggy.Parse()
}

func main() {
    log.SetFlags(0)
    log.Printf("%+v", args)
}

実行すると以下のようになります。

$ task
task: [default] go run . help
app - flaggy sample app

  Flags: 
       --version   Displays the program version string.
    -h --help      Displays help with available flag, subcommand, and positional value parameters.
    -v1 --val1      value 1
       --val2      value 2 (default: 0)
    -v3           value 3

task: [default] go run . version
Version: v1.0.0
task: [default] go run . -v1 helloworld --val2 999 -v3
{Val1:helloworld Val2:999 Val3:true}
task: [default] go run . --val1 hello --val2 888
{Val1:hello Val2:888 Val3:false}

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

try-golang-extlib/examples/singleapp/flaggy/01.basic at main · devlights/try-golang-extlib · GitHub

参考情報

ericgreer.info

Goのおすすめ書籍


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

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