関連記事
GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ
概要
以下、自分用のメモです。
コマンドラインツールを作っていて、サブコマンド付けたいときが結構あります。
標準ライブラリのflagパッケージでも出来ないことは無いのですが面倒です。
有名どころだと cobra とかだと思いますが、個人的にあまり依存関係も無くてシンプルなのが好きです。
んで、ちょっと探してみたところ、以下を発見。
以下のライブラリであると記載されています。以下、引用。
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
参考情報
Goのおすすめ書籍
過去の記事については、以下のページからご参照下さい。
サンプルコードは、以下の場所で公開しています。