Rumah > Artikel > pembangunan bahagian belakang > Bendera berbilang Golang Cobra tanpa nilai
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") } },
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_firmware
和 reboot
.
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!