Go 標準の flag パッケージのテクニック集その2: ロングオプションへ対応する
Go 標準の flag パッケージのテクニック集その1: Usageを綺麗に整形して見やすくする | xshoji’s blog
の続きです。前回は、Go 標準の flag パッケージで Usage を綺麗に整形する方法を紹介しました。 Usage は見やすくなったのですが、次の要件として、ロングオプションを扱いたい、というのがあります。
Unix系のコマンドラインツールでは、一般的にショートオプション( -f のような1文字のオプション)とロングオプション( --file のような複数文字のオプション)の両方をサポートしていることが多いです。
Go 標準の flag パッケージは、 任意の文字列をフラグ名として定義できるので、ショートオプションとロングオプションの両方を実装上定義することは可能ですが、それらが同じ意味のオプションであることが Usage からは伝わりづらいので、そのままではとても使えません。
前回紹介した有名な spf13/cobra や urfave/cli といったフレームワークを使えば簡単に実現できるのですが、 今回はあえて main.go のみで実装することにこだわりたかったため、Go 標準の flag パッケージだけでロングオプションを扱えるようにする方法を試行錯誤してみました。
多少複雑ですが、実用的な実装ができたので、今回はその実装方法について紹介したいと思います。
続きを読む注意: この記事で紹介するスニペットは Go 1.18以上(Genericsを使用するため) が必要です