Go语言学习日记【五】Flag包的使用
原创
©著作权归作者所有:来自51CTO博客作者wx6347c4235109b的原创作品,请联系作者获取转载授权,否则将追究法律责任
一、作用
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())
}