Mix XCLI V1.1 - Go 命令行交互开发框架

onanying · · 3089 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

> OpenMix 出品:[https://openmix.org](https://openmix.org/mix-go) ## Mix XCLI 命令行交互开发框架 CLI Interactive Commander ## Overview 一个命令行交互开发库,它可以让单个 CLI 程序可执行多个命令,同时它还包括命令行参数获取、全局 panic 捕获与处理、程序后台执行等命令行开发常用功能。 ## Github [https://github.com/mix-go/xcli](https://github.com/mix-go/xcli) ## Installation ``` go get github.com/mix-go/xcli ``` ## Quick start ```go package main import ( "github.com/mix-go/xcli" "github.com/mix-go/xcli/flag" ) func main() { xcli.SetName("app").SetVersion("0.0.0-alpha") cmd := &xcli.Command{ Name: "hello", Short: "Echo demo", Run: func() { name := flag.Match("n", "name").String("default") // do something }, } opt := &xcli.Option{ Names: []string{"n", "name"}, Usage: "Your name", } cmd.AddOption(opt) xcli.AddCommand(cmd).Run() } ``` 编译后,查看整个命令行程序的帮助 ``` $ ./go_build_main_go Usage: ./go_build_main_go [OPTIONS] COMMAND [opt...] Commands: hello Echo demo Global Options: -h, --help Print usage -v, --version Print version information Run './go_build_main_go COMMAND --help' for more information on a command. Developed with Mix Go framework. (openmix.org/mix-go) ``` 查看命令行程序的版本信息 ``` $ ./go_build_main_go -v app 0.0.0-alpha, framework 1.0.9 ``` 查看 `hello` 命令的帮助 ``` $ ./go_build_main_go hello --help Usage: ./go_build_main_go hello [opt...] Command Options: -n, --name Your name Developed with Mix Go framework. (openmix.org/mix-go) ``` 执行 `hello` 命令 ``` $ ./go_build_main_go hello ``` ## Flag 参数获取 > 该 flag 比 golang 自带的更加好用,不需要 Parse 操作 参数规则 (部分UNIX风格+GNU风格) ``` /examples/app home -d -rf --debug -v vvv --page 23 -s=test --name=john arg0 ``` - 命令: - 第一个参数,可以为空:`home` - 选项: - 短选项:一个中杠,如 `-d`、`-rf` - 长选项:二个中杠,如:`--debug` - 选项值: - 无值:`-d`、`-rf`、 `--debug` - 有值(空格):`-v vvv`、`--page 23` - 有值(等号):`-s=test`、`--name=john` - 参数: - 没有定义 `-` 的参数:`arg0` 获取选项,可以获取 `String`、`Bool`、`Int64`、`Float64` 多种类型,也可以指定默认值。 ``` name := flag.Match("n", "name").String("Xiao Ming") ``` 获取第一个参数 ``` arg0 := flag.Arguments().First().String() ``` 获取全部参数 ``` for k, v := range flag.Arguments().Values() { // do something } ``` ## Daemon 后台执行 将命令行程序变为后台执行,该方法只可在 Main 协程中使用。 ``` process.Daemon() ``` 我们可以通过配合 `flag` 获取参数,实现通过某几个参数控制程序后台执行。 ```go if flag.Match("d", "daemon").Bool() { process.Daemon() } ``` 上面就实现了一个当命令行参数中带有 `-d/--daemon` 参数时,程序就在后台执行。 ## Handle panic 错误处理 ```go h := func(next func()) { defer func() { if err := recover(); err != nil { // handle panic } }() next() } cmd := &xcli.Command{ Name: "hello", Short: "Echo demo", Run: func() { // do something }, } xcli.Use(h).AddCommand(cmd).Run() ``` ## Application 我们在编写代码时,可能会要用到 App 中的一些信息。 ``` // 获取基础路径(二进制所在目录路径) xcli.App().BasePath // App名称 xcli.App().Name // App版本号 xcli.App().Version // 是否开启debug xcli.App().Debug ``` ## Singleton 单命令 当我们的 CLI 只有一个命令时,只需要配置一下 `Singleton`: ~~~go cmd := &xcli.Command{ Name: "hello", Short: "Echo demo", Run: func() { // do something }, Singleton: true, } ~~~ 命令的 Options 将会在 `-h/--help` 中打印 ~~~ $ ./go_build_main_go Usage: ./go_build_main_go [OPTIONS] COMMAND [opt...] Command Options: -n, --name Your name Global Options: -h, --help Print usage -v, --version Print version information Run './go_build_main_go --help' for more information on a command. Developed with Mix Go framework. (openmix.org/mix-go) ~~~ ## Default 默认执行 当我们的 CLI 有 CUI 时,需要实现点击后默认启动 UI 界面,只需要配置一下 `Default`: ~~~go cmd := &xcli.Command{ Name: "hello", Short: "Echo demo", Run: func() { // do something }, Default: true, } ~~~ ## License Apache License Version 2.0, http://www.apache.org/licenses/

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3089 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传