私は golang を初めて使用し、cobra フレームワークを使用して最初の cli アプリケーションを試しています。
私の計画では、コマンドをほとんど使用せず、多くのフラグを使用することです。 これらのフラグは、-r と一緒に使用するだけでデバイスを再起動できるため、値を追加する必要はありません。
現在、次のように動作していますが、これは正しい方法ではないと考えています。 ご協力をよろしくお願いいたします。
現在のロジックでは、各コマンドにデフォルト値が追加され、実行コマンドでその値を探し、それをキャプチャした後に関数をトリガーします。
私の「作業コード」は以下のようになります。
私の init 関数には、コマンドに次の内容が含まれています。
リーリー実行部分を以下に示します。
chargercmd.flags().stringp("updatefirmware", "u", "", "updeates the firmware of the charger") chargercmd.flags().lookup("updatefirmware").nooptdefval = "yes" chargercmd.flags().stringp("reboot", "r", "", "reboots the charger") chargercmd.flags().lookup("reboot").nooptdefval = "yes"
burakのコメントで述べたように、おそらく使用法をもう少し明確にするため、コマンドとフラグをよりよく区別できるようになります。 cobra を使用すると、root コマンドと、root コマンドにサブコマンドを付加できます。さらに、各コマンドはフラグを受け入れることができます。
あなたの場合、charger
はルート コマンドであり、update_firmware
と reboot
の 2 つのサブコマンドが必要です。
充電器を再起動する例として、次のコマンドを実行します:
リーリー上記のコードでは、サブコマンドをフラグとして定義しようとしています。これは可能ですが、おそらく良い方法ではありません。
代わりに、プロジェクトは次のように設定する必要があります: https://github.com/hesamchobanlou/stackoverflow/tree/main/74934087
その後、ルートの Chargercmd ですべてのフラグのバリエーションをチェックする代わりに、cmd/update_firmware.go の下の対応するコマンド定義に updatefirmware(...)
アクションを移動できます。
これで問題が解決しない場合は、あなたのアプローチが正しくないと思われる理由を詳しく教えてください。
以上がGolang Cobra 値のない複数のフラグの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。