LoginSignup
0
0

More than 3 years have passed since last update.

コマンドライン引数をいい感じに整えてくれる Go ライブラリ nzargv をつくった

Last updated at Posted at 2020-11-07

zakuro9715/nzargv
PkgGoDev GitHub Repo stars

概要

-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 があるので、フラグの値を取り出したりできる。

詳しくは GitHub とか go.dev を参照

開発動機

spf13/cobraurafave/cli など、コマンドラインアプリを作るための便利なライブラリは多くある。

ただ、これらのライブラリはあくまで CLI アプリを作るためのものであり、機能過剰に感じることも多く、少し特殊なアプリケーションを作りたい時などには使いにくい。

かといって、コマンドライン引数の処理は思いのほか面倒であり、これを毎回主導で書くのは非生産的だ。

ということで、コマンドライン引数を処理するにあたって、あらかじめ扱いやすい形に正規化するライブラリを作った。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0