使用flag包可以用來解析命令行參數,flag.TypeVar()用於定義參數並綁定到指定變量,flag.Type()用於定義參數並綁定到返回的指針,定義時可以指定參數名稱,默認值,使用說明。定義完參數後調用flag.Parse()進行解析,flag.PrintDefaults()用於打印所有已定義參數的默認值和使用說明。
命令行參數的語法有如下三種形式,其中前面的減號可以是兩個,整數類型可以是十進制,十六進制,八進制,負數,bool類型可以是1, 0, t, f, true, false, TRUE, FALSE, True, False。如果bool類型的參數在命令行中使用了-flag xxx這種形式,其後的參數都會被當做non-flag參數。
-flag //只支持bool類型,例如-help
-flag=xxx //支持任何類型,例如-help=true -port=4567 -host=127.0.0.1
-flag xxx //只支持非bool類型,例如-port 4567 -host 127.0.0.1
另外,我們還可以創建自定義類型參數,只要實現flag.Value接口即可。如果項目需要更高級的命令行解析方式可以使用第三方庫。
package main
import (
"flag"
"fmt"
)
var(
isShowHelp bool
port uint
)
func main(){
flag.BoolVar(&isShowHelp,"h",false,"help")
flag.UintVar(&port,"port",8888,"the port for connection")
host:=flag.String("host","127.0.0.1","the host")
flag.Parse()
if (isShowHelp){
flag.PrintDefaults()
}
fmt.Printf("host:%s,port:%d",*host,port)
}