個人的に最も実現したかったのが「サブコマンドの個別ファイル化」でして、既存ファイルに触れずにサブコマンドを増やしたかったのです。これについてREADMEにほぼそのままサンプルが書かれていまして、またこの構造がなるほどーと思わせられることしきり。main.goとして、cmd/root.go・cmd/sub.goをcmdパッケージとします。cobra.OnInitialize()}などと書いておきます。RootCmd.AddCommand(subCmd)}という感じに、main.go・cmd/root.goをいじらずにサブコマンドを追加できることになります。...というように孫コマンドが作れますね。複数追加する場合、sub_child.goに追記することも、別ファイルにすることも可能であると。このようにした場合に、「sub以下は共通のフラグを持たせたい」という意図がよくあると思います。...と実行してconfigfileに”hoge.json”が入るようになるわけですね。このような際に、「上の-cで指定した設定ファイルをパースして変数にセットしてから孫コマンドで使いたい」というようなことがあると思います。...}とPersistentPreRunで書いておくと、孫コマンドが実行される際、configfileを読んでconfigstringにセットする、という挙動が事前に実行されることになります。...}というようにPreRunで事前実行することができるかと思います。以上だいぶ雑な例で大変恐縮です。孫コマンドじゃなくてNamespace(sub:foo)が使いたいんじゃ!という場合には、gosuri/cmdnsというライブラリがあるようです(未使用なので何も書けません)。いうことで、cobraで全部まかなえた、というわけでございました。一つだけ問題があるとすれば、フラグを重複させてしまった場合、ビルドは通って実行時にpanicが起きることでしょうか。アホかと言われそうですが、ついうっかりやってしまうのです。testで書けないかなこれ。技術担当取締役を中心に技術者が書いております。プログラミング・サーバー/クラウド技術などについての小ネタから、システム化にまつわるあれこれや、プログラマー教育、そこから発生する様々な考え方などまでご紹介。