天天看點

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

繼續閱讀