首頁 > 後端開發 > Golang > Go中如何實現子命令獨立的標誌集?

Go中如何實現子命令獨立的標誌集?

Susan Sarandon
發布: 2025-01-01 00:08:10
原創
739 人瀏覽過

How to Implement Independent Flag Sets for Subcommands in Go?

GoLang 中的獨立標誌集

flag 套件的Go 文件聲明它允許定義獨立的標誌集,適合用於在命令列介面中實作子命令。然而,問題是如何實現這項功能。

在定義了兩個 FlagSet 物件的情況下,如果命令列包含用於另一個的標誌,則解析一個物件可能會導致錯誤和警告。以下範例說明了這個問題:

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)
}
登入後複製

嘗試執行 cmd -apply 或 cmd -reset 時,此程式碼會產生警告。目標是維護單獨的 FlagSet 對象,確保 -silent 僅適用於 -apply。

解在於區分子指令,然後在適當的 FlagSet 上呼叫 Parse。修改後的程式碼:

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)
    }
}
登入後複製

採用此方法,只會根據指定的子指令解析相關的 FlagSet,從而確保所需的行為。

以上是Go中如何實現子命令獨立的標誌集?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板