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

Bendera berbilang Golang Cobra tanpa nilai

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Lepaskan: 2024-02-05 23:00:14
ke hadapan
613 orang telah melayarinya

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"
Salin selepas log masuk

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")
        }
    },
Salin selepas log masuk


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
Salin selepas log masuk

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!

Label berkaitan:
sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan