Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bendera berbilang Golang Cobra tanpa nilai

Bendera berbilang Golang Cobra tanpa nilai

WBOY
WBOYke hadapan
2024-02-05 23:00:14558semak imbas

Golang Cobra 多个标志没有值

Kandungan soalan

Saya baru mengenali golang dan mencuba aplikasi cli pertama saya menggunakan rangka kerja cobra.

Rancangan saya ialah menggunakan beberapa arahan dan menggunakan banyak bendera. Bendera ini tidak perlu mempunyai nilai yang ditambahkan kerana ia hanya boleh digunakan dengan -r untuk but semula peranti.

Pada masa ini, saya mempunyai kerja berikut, tetapi saya terus berfikir, ini bukan cara yang betul untuk melakukannya. Jadi sebarang bantuan amatlah dihargai.

Logik semasa ialah setiap arahan dilampirkan dengan nilai lalai dan kemudian saya mencari nilai itu dalam arahan run dan mencetuskan fungsi saya selepas menangkapnya.

"Kod kerja" saya kelihatan seperti di bawah.

Fungsi init saya mengandungi kandungan berikut dalam arahan.

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"

Bahagian larian ditunjukkan di bawah.

Run: func(cmd *cobra.Command, args []string) {
        input, _ := cmd.Flags().GetString("UpdateFirmware")
        if input == "yes" {
            fmt.Println("Updating firmware")
            UpdateFirmware(os.Getenv("Test"), os.Getenv("Test2")) 
        }
        input, _ = cmd.Flags().GetString("reboot")
        if input == "yes" {
            fmt.Println("Rebooting Charger")
        }
    },

Jawapan betul


Mungkin untuk membuat penggunaan lebih jelas sedikit, seperti yang dinyatakan dalam ulasan burak - anda boleh membezakan dengan lebih baik antara arahan dan bendera. Dengan cobra anda boleh mempunyai arahan root dan subperintah yang dilampirkan pada arahan root. Selain itu, setiap arahan boleh menerima bendera.

Dalam kes anda, charger 是根命令,您需要两个子命令:update_firmwarereboot.

Sebagai contoh memulakan semula pengecas, anda akan melaksanakan arahan:

$ charger reboot

Dalam kod di atas anda cuba mentakrifkan subperintah sebagai bendera, yang mungkin tetapi mungkin bukan amalan yang baik.

Sebaliknya, projek itu hendaklah disediakan seperti berikut: https://github.com/hesamchobanlou/stackoverflow/tree/main/74934087

Anda kemudian boleh mengalihkan tindakan updatefirmware(...) dalam definisi arahan yang sepadan di bawah cmd/update_firmware.go dan bukannya cuba menyemak setiap varian bendera pada root chargercmd.

Jika ini tidak membantu, sila berikan butiran lanjut tentang sebab anda fikir pendekatan anda mungkin tidak betul?

Atas ialah kandungan terperinci Bendera berbilang Golang Cobra tanpa nilai. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam