Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Melaksanakan Set Bendera Bebas untuk Subperintah dalam Go?

Bagaimana untuk Melaksanakan Set Bendera Bebas untuk Subperintah dalam Go?

Susan Sarandon
Lepaskan: 2025-01-01 00:08:10
asal
740 orang telah melayarinya

How to Implement Independent Flag Sets for Subcommands in Go?

Set Bendera Bebas dalam GoLang

Dokumentasi Go untuk pakej bendera menyatakan bahawa ia membenarkan definisi set bendera bebas, sesuai untuk melaksanakan subperintah dalam antara muka baris arahan. Walau bagaimanapun, persoalan timbul tentang cara untuk mencapai fungsi ini.

Dalam senario di mana dua objek FlagSet ditakrifkan, menghuraikan satu boleh mengakibatkan ralat dan amaran jika baris arahan mengandungi bendera yang ditujukan untuk yang lain. Contoh berikut menggambarkan isu ini:

f1 := flag.NewFlagSet("f1", flag.ContinueOnError)
apply := f1.Bool("apply", false, "")
silent := f1.Bool("silent", false, "")
if err := f1.Parse(os.Args[1:]); err == nil {
    fmt.Println(*apply, *silent)
}
f2 := flag.NewFlagSet("f2", flag.ContinueOnError)
reset := f2.Bool("reset", false, "")
if err := f2.Parse(os.Args[1:]); err == nil {
    fmt.Println(*reset)
}
Salin selepas log masuk

Kod ini menghasilkan amaran apabila cuba melaksanakan cmd -apply atau cmd -reset. Matlamatnya adalah untuk mengekalkan objek FlagSet yang berasingan, memastikan bahawa -silent hanya berfungsi untuk -apply.

Penyelesaian terletak pada membezakan subperintah dan kemudian memanggil Parse pada FlagSet yang sesuai. Kod yang disemak:

f1 := flag.NewFlagSet("f1", flag.ContinueOnError)
silent := f1.Bool("silent", false, "")
f2 := flag.NewFlagSet("f2", flag.ContinueOnError)
loud := f2.Bool("loud", false, "")

switch os.Args[1] {
  case "apply":
    if err := f1.Parse(os.Args[2:]); err == nil {
      fmt.Println("apply", *silent)
    }
  case "reset":
    if err := f2.Parse(os.Args[2:]); err == nil {
      fmt.Println("reset", *loud)
    }
}
Salin selepas log masuk

Dengan pendekatan ini, hanya FlagSet yang berkaitan akan dihuraikan berdasarkan subperintah yang ditentukan, memastikan tingkah laku yang diingini.

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Set Bendera Bebas untuk Subperintah dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan