部署golang項目時難免要通過命令行來設置一些參數,那么在golang中如何操作命令行參數呢?可以使用os庫和flag庫。
1、golang os庫獲取命令行參數
os可以通過變量Args來獲取命令參數,os.Args返回一個字符串數組,其中第一個參數就是執行文件本身。
package main import ( "fmt" "os" ) func main() { fmt.Println(os.Args) }
編譯執行后執行
$ ./cmd -user="root" [./cmd -user=root]
這種方式操作起來要自己封裝,比較費時費勁。golang提供了flag庫,可以很方便的操作命名行參數,下面介紹下flag的用法。
2、golang flag獲取命令行參數
package main import ( "flag" "fmt" ) func main() { ok := flag.Bool("ok", false, "is ok") id := flag.Int("id", 0, "id") port := flag.String("port", ":8080", "http listen port") var name string flag.StringVar(&name, "name", "123", "name") flag.Parse() fmt.Println("ok:", *ok) fmt.Println("id:", *id) fmt.Println("port:", *port) fmt.Println("name:", name) }
像flag.Int、flag.Bool、flag.String這樣的函數格式都是一樣的,第一個參數表示參數名稱,第二個參數表示默認值,第三個參數表示使用說明和描述。flag.StringVar這樣的函數第一個參數換成了變量地址,后面的參數和flag.String是一樣的。
使用flag來操作命令行參數,支持的格式如下:
-id=1 --id=1 -id 1 --id 1
執行一下:
$ go run flag.go -id=2 -name="golang" ok: false id: 2 port: :8080 name: golang
使用-h參數可以查看使用幫助:
$ go run flag.go -h -id=0: id -name="123": name -ok=false: is ok -port=":8080": http listen port
