go语言通过flag包解析命令行参数

简介

在Go程序编译好就是一个二进制文件,我们希望通过不同的参数来执行不同的操作,官方就提供了一个flag包,来实现这个功能。


go语言通过flag包解析命令行参数


流程

<code>定义变量,注册falg -> flag.Parse 解析,并赋值变量 -> 就可以通过变量值判断执行对应的操作
/<code>

定义变量,注册flag

  • 直接通过函数定义并赋值给变量(这里返回的是一个指针变量,取值的时候记得加&)
<code>var number = flag.Int("n", 0, "get number from args")
/<code>

第一个参数是命令行参数名称,第二个是默认值,第三个是参数提示内容

  • 也可以先声明变量,然后再对变量进行注册
<code>var number int
func init() {
\tflag.IntVar(&number, "n", 0,"get number from args")
}
/<code>

第一个参数是变量指针,第二个命令行参数名称,第三个是默认值,第四个是参数提示内容


go语言通过flag包解析命令行参数


解析flag

直接调用Parse函数,就可以解析所有注册的flag

<code>flag.Parse()
/<code>

参数形式

命令行 flag 的语法有如下三种形式:

<code>-flag // 只支持bool类型
-flag=x
-flag x // 只支持非bool类型
/<code>

变量使用

  • 如果使用 flag.Int 方式声明的就需要通过&方式取值
<code>fmt.Println(&number)
/<code>
  • 如果是使用 flag.IntVar 方式声明的就可以直接使用了。
<code>fmt.Println(number)
/<code>

注册函数

以上是注册int类型的参数,其他类似是类似的

<code>func Bool(name string, value bool, usage string) *bool
func BoolVar(p *bool, name string, value bool, usage string)
func Int(name string, value int, usage string) *int
func IntVar(p *int, name string, value int, usage string)
func Int64(name string, value int64, usage string) *int64
func Int64Var(p *int64, name string, value int64, usage string)
func Uint(name string, value uint, usage string) *uint
func UintVar(p *uint, name string, value uint, usage string)
func Uint64(name string, value uint64, usage string) *uint64
func Uint64Var(p *uint64, name string, value uint64, usage string)
func Float64(name string, value float64, usage string) *float64
func Float64Var(p *float64, name string, value float64, usage string)
func String(name string, value string, usage string) *string
func StringVar(p *string, name string, value string, usage string)
func Duration(name string, value time.Duration, usage string) *time.Duration
func DurationVar(p *time.Duration, name string, value time.Duration, usage string)

/<code>

例子



<code>package main

import (
\t"flag"
\t"fmt"
)

var number int

func init() {
\tflag.IntVar(&number, "n", -1, "get number from args")
\tflag.Parse()
}

func main() {
\tfmt.Println(number)
}
/<code>

如果执行的时候,-help或者-h,就会输出最后定义的帮助信息

<code>./command1   -h
Usage of ./command1:
-n int
\tget number from args
/<code>

如果输入非法的参数,就会输出报错和帮助信息

<code>./command1   -n a
invalid value "a" for flag -n: parse error
Usage of ./command1:
-n int
\tget number from args

/<code>

如果输入正确,就可以正常获取到对应的值,如果没有传值,就会使用默认值

<code>./command1   -n 100
100
/<code>


go语言通过flag包解析命令行参数


分享到:


相關文章: