天天看点

Go语言学习日记【五】Flag包的使用

一、作用

          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())
}      

继续阅读