Introduction
- 之前執行程序都是
go build
命令編譯成exe
格式,不帶參數直接執行
- 但在線上開發業務時必須帶參數(指定配置文件等操作)
os.Args
- 其為
string
類型的切片
- 若是在執行程序時,命令行沒有傳入參數,
os.Args
切片中只有一個元素,也就是程序自身
example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| package main
import ( "fmt" "os" )
func testArgs(){ fmt.Println("The Args length is: ",len(os.Args)) for i,v := range(os.Args){ fmt.Printf("index %d is %s\n",i,v) } return }
func main(){ testArgs() }
|
result
1 2 3 4 5 6 7 8 9
| > main.exe > The Args length is: 1 index 0 is main.exe
> main.exe -c D:/go_dev > The Args length is: 3 index 0 is main.exe index 1 is -c index 2 is D:/go_dev
|
- 可以發現自定義傳入的參數,其index皆由1開始
- 且傳入的每一個參數皆由空格(space)分割
tips
- 使用以上的方法去設置參數非常的不友好
- 且會限制使用者對於參數的使用法
- 通常使用以上的方法是為了單純獲取使用者傳入的所有參數
package flag
透過flag包可以用來解析(讀取)命令行的參數,其接受的類型皆為指針
flag.BoolVar(&test, "b", false, "input bool")
其接收的為boolean值
flag.StringVar(&str, "s", "", "input string")
其接收的為string值
flag.IntVar(&count, "c", 1001, "input int")
其接收為int值
- 第一個參數為接收值的變量之地址(類似scanf)
- 第二個參數為key的名字
- 第三個參數為默認值(default value),如果未指定key指向的值,便傳入默認值
- 第四個參數為說明
example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| package main
import( "fmt" "flag" )
func main(){ var configpath string var port int flag.StringVar(&configpath,"c","","input config path") flag.IntVar(&port,"p",3389,"input port ")
flag.Parse() fmt.Println("configpath:",configpath,"port:",port, "start") }
|
result
1 2
| > main.exe -c /var/mysql/config.conf -p 3306 configpath: /var/mysql/config.conf port: 3306 start
|