Go語言中使用urfave/cli命令行框架
命令行參數處理以及urfave/cli使用
1.通過Os.Args獲取cli的參數
package main import ( "fmt" "os" ) func main() { if(len(os.Args) > 1) { for _,value := range os.Args{ fmt.Printf( "%v\n",value) } return } fmt.Printf( "%s","沒輸入參數") }
2. 增加命令行選項
我們經常能看到 使用一些命令行會有很多選項。例如 ls -l 等
可以使用flag包來獲取選項,例如下面的代碼:
package main import ( "flag" "fmt" ) var recusive bool var test string var level int func init() { flag.BoolVar(&recusive, "r", false, "Recusive xxxx") flag.StringVar(&test, "t", "Default String", "string option") flag.IntVar(&level, "l", 1, "level of xxxx") flag.Parse() } func main() { fmt.Println("recusive:", recusive) fmt.Println("test:", test) fmt.Println("level:", level) }
init函數內部使用瞭flag包中的BoolVar、StringVar以及IntVar等方法,標記瞭命令的選項。
// StringVar defines a string flag with specified name, default value, and usage string. // The argument p points to a string variable in which to store the value of the flag. func StringVar(p *string, name string, value string, usage string) { CommandLine.Var(newStringValue(value, p), name, usage) }
像源碼中描述那樣,第一個參數用來接收輸入的參數值,第二個用來定義參數名稱(-l -r 等),第三個是默認參數、第四個是使用方法。
於是像上面的代碼我們就可以這樣使用:這裡BoolVar的默認值是false, -r後面不增加其他參數,不用 -r true 這樣。
3.urfave/cli的簡單使用
urfave/cli是一個命令行的框架。舉例說明:
package main import ( "fmt" "os" "github.com/urfave/cli" //必須使用這個包 ) func main() { //定義兩個變量用於接收控制臺輸入的值 var stringValue string var boolValue bool //new一個app出來,就是我們的命令行程序 app := cli.NewApp() app.Name = "TestCliApp" //起個名稱 app.Usage = "Test" //描述一下用途 app.Version = "2.0.0" //設置一下版本號 //重點可以設置一些選項操作 //第一個是一個字符串的選項,第二個是一個佈爾的選項 app.Flags = []cli.Flag{ cli.StringFlag{ Name: "StringOption,s", Value: "DefaultValue", Usage: "Display a string value", Destination: &stringValue, }, cli.BoolFlag{ Name: "BoolOption,b", Usage: "Display a bool value", Destination: &boolValue, }, } //定義我們命令行程序主要的工作 app.Action = func(c *cli.Context) error { if c.NArg() > 0 { cmds := c.Args() for index, v := range cmds { fmt.Printf("args[%d]=%v\t", index, v) } } else { fmt.Println("No Args") } fmt.Println("stringOption", stringValue) fmt.Println("boolOption", boolValue) return nil } //執行程序 app.Run(os.Args) }
有幾個點:
- 1.定義Flag的時候,Name可以用【,】分割,前面長的 可以用 –XXXX 來增加參數,後面則是短名 -x 來表示
- 2.默認會有help和version兩個選項
- 3.我在使用的時候發現,當輸入正常的 -b -s Hello 這樣的選項的時候,C.NArg()返回的值是0,而輸出錯誤的參數列表的時候,則是有值存在的。
我們可以用 -h (–help)查看一下生成的文檔
可以參考具體的文檔來構建自己的命令
到此這篇關於Go語言中使用urfave/cli命令行框架的文章就介紹到這瞭。希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。
推薦閱讀:
- Golang開發命令行之flag包的使用方法
- go語言基礎 seek光標位置os包的使用
- Golang 基於 flag 庫實現一個簡單命令行工具
- 使用Golang快速構建出命令行應用程序
- go語言 全局變量和局部變量實例