golang 獲取命令行參數

golang 程序獲取命令行參數,然後根據傳遞的參數做不同的邏輯處理

通過os.Args 獲取

os.Args 變量是個string切片,我們可以通過API 手冊得知,os包裏面定義了這個變量。

var Args []string

Args保管了命令行參數,第一個是程序名,下面通過實例來演示下如何解析命令行參數

package main
import (
	"fmt"
	"os"
)

func main() {
	var cmdArgs []string
	cmdArgs = os.Args
	// 看看命令行參數個數
	length := len(cmdArgs)
	// 這裏計算命令行參數時候,命令本身不算
	fmt.Printf("共有:%d 個參數\n", length - 1)
	// 遍歷 通過命令行帶來的參數信息
	if length == 1{
		fmt.Println("沒有帶來任何參數")
		return
	}
	for _, v := range cmdArgs {
		fmt.Println(v)
	}
}

編譯一把,得到一個可執行文件,然後通過命令行傳入參數。

dog500:demo08 dsm$ go build -o test main.go
dog500:demo08 dsm$ ./test aa bb cc dd ee fff
共有:6 個參數
./test
aa
bb
cc
dd
ee
fff
dog500:demo08 dsm$

這種方式解析命令參數不夠靈活,參數位置必須固定下來,否則程序裏面無法做業務邏輯處理。接下來介紹一種更靈活的解析方法

通過flag包解析命令行參數

package main

import (
	"flag"
	"fmt"
)

func main() {
	// 模擬個mysql 用戶命令行登錄
	var host, user, password string
	var port int
	flag.StringVar(&host, "h", "localhot", "主機地址")
	flag.StringVar(&user, "u", "root", "用戶名")
	flag.StringVar(&password, "p", "", "密碼")
	flag.IntVar(&port, "P", 3306, "端口")
	flag.Parse()
	fmt.Println(host, user, password, port)
}

編譯部署、測試下

dog250:demo08 dsm$ ./demo  -u root -p 123 -h 8.8.8.8 -P 9999
8.8.8.8 root 123 9999
dog250:demo08 dsm$ ./demo  -u root -p 123 -h 8.8.8.8
8.8.8.8 root 123 3306
dog250:demo08 dsm$ ./demo  -u root -p 123 -h 8.8.8.8  -P
flag needs an argument: -P
Usage of ./demo:
  -P int
    	端口 (default 3306)
  -h string
    	主機地址 (default "localhot")
  -p string
    	密碼
  -u string
    	用戶名 (default "root")
dog250:demo08 dsm$

是不是更加靈活了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章