一、作用
flag包實作了對指令行參數的解析
二、示例
flag.string(),flag.int() 等函數注冊flag,下例聲明了一個整數flag,解析結果儲存在*int指針ip裡:
import "flag"
var ip = flag.Int("flagname", 1234, "help message for flagname")
當然,我們也可以把flag綁定到一個變量,使用Var系列函數:
var flagvar int
func init() {
flag.IntVar(&flagvar, "flagname", 1234, "help message for flagname")
}
對這種flag,預設值就是該變量的初始值。
在所有flag都注冊之後,調用:flag.Parse() 來解析指令行參數寫入注冊的flag裡
解析之後,flag的值可以直接使用。如果你使用的是flag自身,它們是指針;如果你綁定到了某個變量,它們是值。
fmt.Println("ip has value ", *ip)
fmt.Println("flagvar has value ", flagvar)
flag.Args() // 傳回無标志的指令行參數
三、代碼示例
package main
import (
"flag"
"fmt"
)
var (
arg_help bool
arg_host string
arg_port int
)
func init() {
flag.BoolVar(&arg_help, "h", false, "this help")
flag.StringVar(&arg_host, "H", "127.0.0.1", "Appoint the host of remote tcp server")
// 另一種綁定方式
var _port = flag.Int("P", 8080, "Appoint the port of remote tcp server")
flag.Parse()
arg_port = *_port
fmt.Printf("Input port arg: %d\n", arg_port)
}
func main() {
if arg_help {
fmt.Println("This is a tcp client demo, command line is as tcp_client [-H 127.0.0.1] [-P 8080]")
}
fmt.Println("Host:", arg_host, "Port:", arg_port)
fmt.Println(flag.Args())
}