概要
-ab=0 --value1=0 --value2 1
こういうのを
-a -b=0 --value=0 --value2=1
こうしてくれる
やってくれること
(値の個数をあらかじめ FlagN
で指定する必要あり
-
-a
のようなフラグ -
-a=b
のような値付きフラグ -
-a b
のような、イコールのない値付きフラグ -
-abc
のような、単一文字をまとめたフラグ (-a -b -c として展開される) -
-abc=d
のような、上記に値のついたフラグ。最後のフラグ(この場合c)にのみ値が設定される -
-abc d
のような、上記のイコールがないバージョン -
-
で開始せず、フラグの値でもない値は Arg として処理 - カンマ区切りの値は複数の値として認識。つまり、a の FlagN が 2 の場合、
--a=b,c
と、--a b c
は同じ - 同じ名前のフラグが複数回指定されてもそのままになるが、メソッドでマージできる
やや微妙な挙動
- FlagN で値の数を指定するが、これはコンマ区切りの値については現状無視される。
使い方
New で App を作って設定系のメソッドを呼び出してから、ノーマライズメソッドを呼び出す。
ToStrings がついているのが、戻り値が string slice になる系のメソッド。ついていないものは、[]nzargv.Value
が返る。Value には Name や Value があるので、フラグの値を取り出したりできる。
開発動機
spf13/cobra や urafave/cli など、コマンドラインアプリを作るための便利なライブラリは多くある。
ただ、これらのライブラリはあくまで CLI アプリを作るためのものであり、機能過剰に感じることも多く、少し特殊なアプリケーションを作りたい時などには使いにくい。
かといって、コマンドライン引数の処理は思いのほか面倒であり、これを毎回主導で書くのは非生産的だ。
ということで、コマンドライン引数を処理するにあたって、あらかじめ扱いやすい形に正規化するライブラリを作った。