【GOARGS】使用GO语音写控制台命令程序的神器

GOARGS

GOLang的参数处理工具

  • 可视化模板,所见即所得
  • 通行命令行格式,不改变输入习惯

项目地址:https://github.com/yymmiinngg/goargs

go.mod

在 go.mod 中添加

require github.com/yymmiinngg/goargs v0.0.8-beta

示例

import goargs "github.com/yymmiinngg/goargs"

// 这里可以替换成 os.Args 以处理控制台命令行
var argsArr = []string{"clone", "-c", "-b", "10240", "/etc/my.cnf", "/etc/my.cnf.bak1", "/etc/my.cnf.bak2", "--help"}

// 模板
template := `
    Usage: {{COMMAND}} {{OPTION}} <SRC> [DEST]...
    将文件克隆成多个副本, SRC 源文件, DEST... 目标文件列表(默认为"$SRC.bak")
    
    ? -c, --check-space  ## 克隆前检查所须空间
    + -b, --buffer-size  ## 缓冲区大小(用于复制转移数据的临时内存空间大小)
    #                       默认值为:1024
    ?     --help         ## 显示帮助后退出
    ?     --version      ## 显示版本后退出
    
    更多细节及说明请访问 https://xxx.xxxxx.xx
`

// 定义变量
var SRC string
var DEST []string
var c, help, version bool
var b int

// 编译模板
args, err := goargs.Compile(template)
if err != nil {
    fmt.Println(err.Error())
    return
}

// 绑定变量
args.StringOperan("SRC", &SRC, "")
args.StringsOperan("DEST", &DEST, nil)
args.BoolOption("-c", &c, false)
args.IntOption("-b", &b, 1024)
args.BoolOption("--help", &help, false)
args.BoolOption("--version", &version, false)

// 处理参数
if err := args.Parse(argsArr, AllowUnknowOption); err != nil {
    fmt.Println(err.Error())
    fmt.Println(args.Usage())
    return
}

//  输出

fmt.Println("--------------------------------------------------")
fmt.Printf("%12s  %v \n", "SRC", SRC)
fmt.Printf("%12s  %v \n", "DEST", DEST)
fmt.Printf("%12s  %v \n", "-c", c)
fmt.Printf("%12s  %v \n", "-b", b)
fmt.Printf("%12s  %v \n", "--help", help)
fmt.Printf("%12s  %v \n", "--vesrion", version)
fmt.Println("--------------------------------------------------")

if help {
    fmt.Println(args.Usage())
    return
}

if help {
    fmt.Println("v0.0.1")
    return
}

运行结果

--------------------------------------------------
         SRC  /etc/my.cnf 
        DEST  [/etc/my.cnf.bak1 /etc/my.cnf.bak2]
          -c  true
          -b  10240
      --help  true
   --vesrion  false
--------------------------------------------------
Usage: clone [OPTION]... SRC [DEST]...
将文件克隆成多个副本, SRC 源文件, DEST... 目标文件列表(默认为"$SRC.bak")

  -c, --check-space     克隆前检查所须空间
  -b, --buffer-size     缓冲区大小(用于复制转移数据的临时内存空间大小)
                        默认值为:1024
      --help            显示帮助后退出
      --version         显示版本后退出

更多细节及说明请访问 https://xxx.xxxxx.xx

使用说明

模板常量

常量说明
{{COMMAND}}程序命令,将参数列表中的命令项(通常为第1项)渲染到Usage()输出中。
{{OPTION}}参数项,将被替换成 [OPTION]…

模板行类型

模板行分为4种类型,Usage行、选项定义行、注释行和空行

  • Usage行

    以“Usage:”开头,作为程序(或命令)的使用说明,例如 Usage: {{COMMAND}} {{OPTION}} <SRC> [DEST]...

  • 选项定义行

    定义程序的运行选项,有简称(-x)和全称(–xx-xxx)的区分,例如 -b, --buffer-size 前者为简称,后者为全称。

    # 使用时,简称以空格分隔值,全称以等号(=)分隔值。
    cmd -x vv -xx-xxx=vv
    

    在选项定义后面以’##'分隔选项定义与选项注释,如:

    ? -c, --check-space  ## 克隆前检查所须空间
    
  • 注释行

    整行注释 以’#’ 开头,后面的内容都将作为注释输出

参数定义

参数定义必须放置在"Usage:"行。

格式说明
<参数名>必要参数
[参数名]可选参数,可选参数必须放在必要参数后面
列表参数,可获取 []string 类型的参数值,只能定义在所有参数的最后一个

选项定义

定义符说明
*必要选项
+可选选项
?开关选项,后面不接参数值,输出为 bool 类型
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值