golang开发:类库篇(三)命令行工具cli的使用
为什么要使用命令行
觉得这个问题不应该列出来,又觉得如果初次进行WEB开发的话,可能会觉得所有的东西都可以使用API去做,会觉得命令行没有必要。
其实,一个生产的项目命令行是绕不过去的。比如运营需要导出报表、统计下付费用户、服务不稳定修改下订单状态等等,再者,命令行的工具基本都是内部使用,调试日志可以随意点,退一万步来说,即使有问题了,还可以再次修改。不像API是是随机性的,有些业务发生错误和异常是随机的、不可逆的。
怎么使用cli
这个主要看下使用案例就一目了然了。
首先下载类库包
go get github.com/urfave/cli
main.go
package main
import (
"fmt"
"os"
"github.com/urfave/cli"
)
func main() {
app := cli.NewApp()
app.Commands = []cli.Command{
{
Name: "test",
Usage: "test --uid=x --username=y",
Action: (&Command{}).Test,
Flags: []cli.Flag{
cli.IntFlag{Name: "uid",Usage:"--uid"},
cli.StringFlag{Name:"username",Usage:"--username"},
},
},
}
err := app.Run(os.Args)
if err != nil {
fmt.Print("command error :" + err.Error())
}
}
command.go
package main
import (
"fmt"
"github.com/urfave/cli"
)
type Command struct {
}
func (this *Command) Test(cli *cli.Context) {
uid := cli.Int("uid")
username := cli.String("username")
fmt.Println(uid,username)
}
编译运行
go build -o test.bin
./test.bin
NAME:
test.bin - A new cli application
USAGE:
test.bin [global options] command [command options] [arguments...]
VERSION:
0.0.0
COMMANDS:
test test --uid=x --username=y
help, h Shows a list of commands or help for one command
执行命令看下结果
./test.bin test --uid=110 --username=feixiang
110 feixiang
就是这么简单
可以再看看子命令
func main() {
app := cli.NewApp()
app.Commands = []cli.Command{
{
Name: "test",
Usage: "test1 --uid=x --username=y|test2 --uid=x --username=y",
Subcommands:[]cli.Command{
{
Name: "test1",
Usage: "test1 --uid=x --username=y",
Action: (&Command{}).Test,
Flags: []cli.Flag{
cli.IntFlag{Name: "uid",Usage:"--uid"},
cli.StringFlag{Name:"username",Usage:"--username"},
},
},
{
Name: "test2",
Usage: "test2 --uid=x --username=y",
Action: (&Command{}).Test,
Flags: []cli.Flag{
cli.IntFlag{Name: "uid",Usage:"--uid"},
cli.StringFlag{Name:"username",Usage:"--username"},
},
},
},
},
}
err := app.Run(os.Args)
if err != nil {
fmt.Print("command error :" + err.Error())
}
}
编译运行看下结果
go build -o test.bin
./test.bin test test1 --uid=111 --username=hello
111 hello
./test.bin test test2 --uid=111 --username=hello
111 hello
就是再加了一层命令
命令行的使用比较简单。基本也没有需要注意的。
如果需要了解更详细的使用,看下文档
https://github.com/urfave/cli
golang开发:类库篇(三)命令行工具cli的使用的更多相关文章
- golang开发:类库篇(五)go测试工具goconvey的使用
为什么要使用goconvey测试程序 goconvey 集成go test,go test 无缝接入.管理运行测试用例,而且提供了丰富的函数断言.非常友好的WEB界面,直观的查看测试结果. 如果没有g ...
- 使用.Net Core编写命令行工具(CLI)
命令行工具(CLI) 命令行工具(CLI)是在图形用户界面得到普及之前使用最为广泛的用户界面,它通常不支持鼠标,用户通过键盘输入指令,计算机接收到指令后,予以执行. 通常认为,命令行工具(CLI)没有 ...
- commanderJs编写命令行工具(cli)
前言: 最近需要做一个内部的node cli来独立构建流程,对整个命令行工具实现流程有了大致了解,下面来解释一下如何实现一个cli,和如何使用 commander 库. 新手误区: 在开始实现之前 ...
- golang开发:类库篇(一) Zap高性能日志类库的使用
为什么要用zap来写日志 原来是写PHP的,一直用的error_log,第一次写Go项目的时候,还真不知道该怎么写日志,后来就按照PHP的写法自己不成规范的捣鼓写.去了新公司之后,发现用的是zap.后 ...
- golang开发:类库篇(四)配置文件解析器goconfig的使用
为什么要使用goconfig解析配置文件 目前各语言框架对配置文件书写基本都差不多,基本都是首先配置一些基础变量,基本变量里面有环境的配置,然后通过环境变量去获取该环境下的变量.例如,生产环境跟测试环 ...
- golang开发:类库篇(二) Redis连接池的使用
为什么要使用连接池 一个数据库服务器只拥有有限的连接资源,一旦所有的连接资源都在使用,那么其它需要连接的资源就只能等待释放连接资源.所以,在连接资源有限的情况下,提高单位时间的连接的使用效率,缩短连接 ...
- Flask内置命令行工具—CLI
应用发现 flask命令在Flask库安装后可使用,使用前需要正确配置FLASK_APP环境变量以告知用户程序所在位置.不同平台设置方式有所不同. Unix Bash (Linux, Mac, etc ...
- Apache Commons CLI 开发命令行工具示例
概念说明Apache Commons CLI 简介 虽然各种人机交互技术飞速发展,但最传统的命令行模式依然被广泛应用于各个领域:从编译代码到系统管理,命令行因其简洁高效而备受宠爱.各种工具和系统都 提 ...
- SpringBootCLI 命令行工具
Spring Boot CLI 是用于快速开发 Spring 应用的命令行工具.用来运行 Groovy (与 Java 风格类似)脚本. spring-cli 似乎不是可以各种diy spring-b ...
随机推荐
- 赵伟国辞去TCL集团董事等职位,紫光参与TCL定增浮盈已超7亿
集微网消息,TCL 集团于8月9日晚间发布公告称,公司董事会于近日收到董事赵伟国先生的书面辞职报告,赵伟国先生因个人原因申请辞去公司董事及公司战略委员会委员职务.辞任后,赵伟国先生不再担任公司任何职务 ...
- 一个由单例模式在多线程环境下引发的 bug
问题症状 HTTP 日志系统,老是出现日志信息覆盖的情况.比如同时调用 A 接口和 B 接口,B 接口请求响应信息变成了 A 接口请求响应相关信息.这个问题在并发量大的情况下越来越严重. 问题初步分析 ...
- How do you create a DynamicResourceBinding that supports Converters, StringFormat?
原文 How do you create a DynamicResourceBinding that supports Converters, StringFormat? 2 down vote ac ...
- Gralde 网络代理
Gralde 网络代理 Gradle在编译项目的时候,需要下载一些依赖.墙外的网络就需要设置代理了. 设置的方法,见文档: Accessing the web through a HTTP proxy ...
- 网站运行编译器错误CS1617: 选项“6”对 /langversion 无效;必须是 ISO-1、ISO-2、3、4、5 或 Default
运行winform程序时提示, CS1617: 选项“6”对 /langversion 无效:必须是 ISO-1.ISO-2.3.4.5 或 Default 找到网站的web.config配置文件,找 ...
- LINQ学习笔记(三)
下面对各子句解释 from子句:查询表达式的开始子句,查询表达式必须以from子句开头. 格式:from u in source 其中u表示范围变量,它表示源序列中的每个后续元素,source为数据源 ...
- Android Java调用Qt写的so库
有时候,我们反编译apk得到一个so库,如果直接使用这个so库的话,必须使用原来so库同样的package名字,才能用.这样人家反编译你的apk,就知道你侵犯了人家的版权.为了达到混淆的目的,我们可以 ...
- 腾讯移动Web整体解决方案Spirit
Spirit(勇气号),美国航天局NASA派往Mars(火星)的第一艘探测器.移动Web开发是一块新的领域,甚至有很多坑,这一点与人类从未踏上的Mars(火星)相似.为了避免开发者重复遇到相同的问题, ...
- Markdown的选择
直击现场 我一直在思索用什么格式存储文档比较好.之前一直在用google docs,但是它的格式不公开,上传/下载的时候需要转换格式,转换的时候必然会丢失一些信息.于是后来想,那还是纯本文或者mark ...
- QML动画概述(几十篇相关博客)
QML提供了丰富的动画元素,说起动画,无非是给UI增光添彩罢了.在QML中,动画常常与State和Transition联系在一起,这几个概念(下面的例子中都用到了)都比较简单,相关介绍可查看Qt官方文 ...