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 ...
随机推荐
- 通通玩blend美工(6)下——仿iPhone滚动选择器的ListBox(交互逻辑)
原文:通通玩blend美工(6)下--仿iPhone滚动选择器的ListBox(交互逻辑) 上一篇我们已经把界面画出来了,这篇我们就来制作交互的逻辑吧.上一篇的电梯: http://www.cnblo ...
- 用树莓派和DS18B20做个汽车温度记录仪
原文:用树莓派和DS18B20做个汽车温度记录仪 用树莓派和DS18B20做个汽车温度记录仪[原创] 很想知道夏日阳光暴晒下,汽车内的最高温度以及温度的变化情况.觉得用树莓派和DS18B20来实现应该 ...
- XML序例化工具类
Model: [XmlRoot(ElementName = "root")] public class BookModel { [XmlElement] public string ...
- Aspect Oriented Programming面向切面编程
I简介 Aspect Oriented Programming(AOP),面向切面编程,是一个比较热门的话题.AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或 ...
- 【shell】递归函数----调用自身的函数
什么是递归函数? 一句话,调用自己的函数称为递归函数! #!/bin/bash declare -i count checkoutCount(){ read -p "Enter an cou ...
- Win8 Metro(C#)数字图像处理--2.73一种背景图像融合特效
原文:Win8 Metro(C#)数字图像处理--2.73一种背景图像融合特效 /// <summary> /// Image merge process. /// </summar ...
- sqlserver从xlsx读取数据
exec sp_configure 'show advanced options',1 reconfigure exec sp_configure 'Ad Hoc Distributed Querie ...
- Win8Metro(C#)数字图像处理--2.17图像木刻效果
原文:Win8Metro(C#)数字图像处理--2.17图像木刻效果 [函数名称] 图像木刻效果函数WoodCutProcess(WriteableBitmap src) [函数代码] ///& ...
- error C2760: 语法错误: 意外的令牌“标识符”,预期的令牌为“类型说明符”
解决办法: 打开项目工程----> 属性 ---> c/c++ --> 语音 --> 符合模式 修改成否即可
- 企业级架构 MVVM 模式指南 (WPF 和 Silverlight 实现) 译(2)
本书包含的章节内容 第一章:表现模式,以一个例子呈献给读者表现模式的发展历程,我们会用包括MVC和MVP在内的各种方式实现一个收费项目的例子.沿此方向,我们会发现每一种模式的问题所在,这也是触发设计模 ...