美文网首页
go Flag应用

go Flag应用

作者: WangGavin | 来源:发表于2018-01-14 20:21 被阅读41次
仿nginx命令行

go语言些命令行程序是不错的选择,所以它可以轻松达到如上图类似nginx命令行的效果

例子

package main

import (
    "flag"
    "fmt"
    "os"
)

//
var (
    h bool

    v,V bool
    t,T bool
    q *bool

    s string
    p string
    c string
    g string

    n int64
)

func init(){
    flag.BoolVar(&h,"h",false,"this help")
    flag.BoolVar(&v,"v",false,"show version and exit")
    flag.BoolVar(&V,"V",false,"show version and configure options then exit")
    flag.BoolVar(&t,"t",false,"test configuration and exit")
    flag.BoolVar(&T,"T",false,"test configuration,dump it and exit")

    //另一中绑定方式
    q = flag.Bool("q",false,"suppress non-error messages during configuration testing")
    //注意’signal‘,默认是 -S string 有了`signal`之后,变为-s signal
    flag.StringVar(&s,"s","","send `signal` to a master")
    flag.StringVar(&p,"p","/usr/local/nginx","set configuration `file`")
    flag.StringVar(&c,"c","conf/nginx.conf","set confiruration `file`")
    flag.StringVar(&g,"g","conf/nginx.conf","set global `directives` out of configuraton file")

    flag.Int64Var(&n,"n",0,"set `number`")
    //改变默认的usage
    flag.Usage=Usage
}

func main() {
    flag.Parse()
    if h {
        flag.Usage()
    }
    if len(s)!=0{
        fmt.Println(s)
    }
    if n !=0{
        fmt.Println(n)
    }
}

func Usage() {
    fmt.Fprintf(os.Stderr,`nginx version: nginx/1.10.0 Usage:nginx [-hvVtTq] [-n number] [-s signal] [-c filename] [-p prefix] [-g directives]
Options:
`)
    flag.PrintDefaults()
}

先执行go build或go install 编译代码
执行FlagPrac -h 命令就可以输出帮助信息了
执行FlagPrac -s wang

执行FlagPrac -s wang

Flag 概述

参考:标准库—命令行参数解析FLAG

两种定义Flag方式

  • Flag.Xxx()

其中Xxx可以是Int,String等;返回一个相应类型的指针,如:

q = flag.Bool("q",false,"suppress non-error messages during configuration testing")
  • Flag.XxxVar()

将flag绑定到一个变量上,如:

flag.BoolVar(&h,"h",false,"this help")

另外还可以创建自定义flag,只要实现flag.Value接口即可

Flag解析

在所有的flag定义完成之后,可以通过调用flag.Prarse()进行解析,命令行flag的语法有如下三种方式:

  • flag //只支持bool类型
  • flag=x
  • flag x //只支持非bool类型

int类型可以是十进制、十六进制、八进制甚至是负数;bool类型可以是1, 0, t, f, true, false, TRUE, FALSE, True, False。Duration可以接受任何time.ParseDuration能解析的类型

类型和函数

ErrHelp:该错误类型用于当命令行指定了-help参数但没有定义时。
Usage:这是一个函数,用于输出所有定义了的命令行参数和帮助信息(usage message)。一般,当命令行参数解析出错时,该函数会被调用。我们可以指定自己的Usage函数,即:flag.Usage = func(){}

相关文章

  • go Flag应用

    go语言些命令行程序是不错的选择,所以它可以轻松达到如上图类似nginx命令行的效果 例子 先执行go build...

  • Go标准库flag使用

    Go语言标准库flag基本使用 Go语言内置的flag包实现了命令行参数的解析,flag包使得开发命令行工具更为简...

  • Go常用第三方库集锦

    来自Go每日一库[https://github.com/darjun/go-daily-lib]: flag[ht...

  • go flag 理解

    注意点: 1.flag返回的值是指针 2.见图flag_Parse.png 使用:不使用-n的时候 使用-n的时候

  • go-flag

    简介 在上一篇文章中,我们介绍了flag库。flag库是用于解析命令行选项的。但是flag有几个缺点: 不显示支持...

  • Golang获取命令行参数

    使用os.Args获取命令行参数 终端命令:go run main.go 20 马超 true 20 使用flag...

  • golang

    一、go基础 二、go应用 1 初级应用 1.1. 反射reflection 1.2. server服务 1.3....

  • Thor on ruby,Flag on go

    Thor gem是一个能够创建健壮命令行接口的工具箱。在Bundler,Vagrant,Rails和其他命令中被使...

  • go flag包使用

    Go是怎么接受外部的命令行参数的? 在Python中有 sys 模块下的 sys.args 可以获取命令行列表,与...

  • go 工具库 flag

    工作中,经常需要开发一下命令行小工具,需要用到命令解析的功能,go flag 库可以快速的帮我们实现。 flag....

网友评论

      本文标题:go Flag应用

      本文链接:https://www.haomeiwen.com/subject/gtlloxtx.html