<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ## 解析命令行參數 上一節中的flag標識是命令行參數中的一種。本章將通過構造嵌套命令來擴展命令行參數。 和上一節類似,我們同樣需要一個main函數來調用并執行。有很多的第三方庫支持處理復雜的嵌套參數和標識,在這里我們將研究如何僅使用標準庫來實現。 ### 實踐 1. 建立cmdargs.go: ``` package main import ( "flag" "fmt" "os" ) const version = "1.0.0" const usage = `Usage: %s [command] Commands: Greet Version ` const greetUsage = `Usage: %s greet name [flag] Positional Arguments: name the name to greet Flags: ` // MenuConf 保存嵌套命令行的級別參數 type MenuConf struct { Goodbye bool } // SetupMenu 初始化flag標識 func (m *MenuConf) SetupMenu() *flag.FlagSet { menu := flag.NewFlagSet("menu", flag.ExitOnError) menu.Usage = func() { fmt.Printf(usage, os.Args[0]) menu.PrintDefaults() } return menu } // GetSubMenu 返回子菜單的flag集 func (m *MenuConf) GetSubMenu() *flag.FlagSet { submenu := flag.NewFlagSet("submenu", flag.ExitOnError) submenu.BoolVar(&m.Goodbye, "goodbye", false, "Say goodbye instead of hello") submenu.Usage = func() { fmt.Printf(greetUsage, os.Args[0]) submenu.PrintDefaults() } return submenu } // Greet 由greet命令調用 func (m *MenuConf) Greet(name string) { if m.Goodbye { fmt.Println("Goodbye " + name + "!") } else { fmt.Println("Hello " + name + "!") } } // Version 打印存儲為const的當前版本值 func (m *MenuConf) Version() { fmt.Println("Version: " + version) } ``` 2. 建立main.go: ``` package main import ( "fmt" "os" "strings" ) func main() { c := MenuConf{} menu := c.SetupMenu() if err := menu.Parse(os.Args[1:]); err != nil { fmt.Printf("Error parsing params %s, error: %v", os.Args[1:], err) return } // 在未輸出參數的情況下 // os.Args[0]是執行文件所在的路徑 // len(os.Args) > 1說明輸入了命令行參數 if len(os.Args) > 1 { // 根據分支條件打印輸出 switch strings.ToLower(os.Args[1]) { case "version": c.Version() case "greet": f := c.GetSubMenu() if len(os.Args) < 3 { f.Usage() return } if len(os.Args) > 3 { if err := f.Parse(os.Args[3:]); err != nil { fmt.Fprintf(os.Stderr, "Error parsing params %s, error: %v", os.Args[3:], err) return } } c.Greet(os.Args[2]) default: fmt.Println("Invalid command") menu.Usage() return } } else { menu.Usage() return } } ``` 3. 命令行輸入不同的參數會顯示: ``` $./cmdargs -h Usage: ./cmdargs [command] Commands: Greet Version $./cmdargs version Version: 1.0.0 $./cmdargs greet Usage: ./cmdargs greet name [flag] Positional Arguments: name the name to greet Flags: -goodbye Say goodbye instead of hello $./cmdargs greet reader Hello reader! $./cmdargs greet reader -goodbye Goodbye reader! ``` ### 說明 flag.FlagSets可用于設置預期參數。開發人員需要對各參數進行驗證,在命令的正確參數子集中進行解析并定義使用字符串。這很容易出錯,需要大量迭代才能保證正確性。 flag包幫助開發者解析命令行參數。本節演示了構建復雜命令行應用的基本方法,包括包級別配置,位置參數,多級命令以及如何根據需要將代碼拆分為多個文件。 * * * * 學識淺薄,錯誤在所難免。歡迎在群中就本書提出修改意見,以饗后來者,長風拜謝。 Golang中國(211938256) beego實戰(258969317) Go實踐(386056972)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看