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

原文地址:https://www.cnblogs.com/feixiangmanon/p/11185239.html

时间: 2025-01-11 09:47:04

golang开发:类库篇(三)命令行工具cli的使用的相关文章

推荐给开发人员的实用命令行工具

摘要:优秀的工具对于定位问题出在何处有着无可估量的价值,而且能在一开始就帮助我们阻止问题的出现,总的来说能使我们的工作更有效率.本文介绍了6个非常强大且灵活的工具,熟练使用这些工具能使你的生活变得更轻松一些. 作为一名Web开发者,当程序出现问题时日子总不是那么好过.问题可能无处不在,可能是你发送的请求出了错,可能是回复出了错,可能是你使用的某个第三方库出了问题,又或者是一个外部API调用失败了.优秀的工具对于定位问题出在何处有着无可估量的价值,而且能在一开始就帮助我们阻止问题的出现,总的来说能

golang开发:类库篇(四)配置文件解析器goconfig的使用

为什么要使用goconfig解析配置文件 目前各语言框架对配置文件书写基本都差不多,基本都是首先配置一些基础变量,基本变量里面有环境的配置,然后通过环境变量去获取该环境下的变量.例如,生产环境跟测试环境使用同一份配置,但是相应的环境下的变量的值是不一样的,通过环境获其取对应的的key value.没明白没关系,举例子的时候就明白了. PHP的框架yaf.golang的框架beego.对配置的书写和解析基本都是一致的. 看下goconfig的解释 goconfig 是一个易于使用,支持注释的 Go

golang开发:类库篇(二) Redis连接池的使用

为什么要使用连接池 一个数据库服务器只拥有有限的连接资源,一旦所有的连接资源都在使用,那么其它需要连接的资源就只能等待释放连接资源.所以,在连接资源有限的情况下,提高单位时间的连接的使用效率,缩短连接时间,就能显著缩短请求时间. 所以就有了连接池的概念,在初始化时,创建一定数量的连接,先把所有连接存起来,然后,谁需要使用,从这里取走,干完活立马放回来. 如果请求数超出连接池容量,那么就排队等待或者直接丢弃掉.这样就可以省掉每次都创建和关闭连接的资源消耗和时间. 如果不使用连接池,那么,每次传输数

Flask内置命令行工具—CLI

应用发现 flask命令在Flask库安装后可使用,使用前需要正确配置FLASK_APP环境变量以告知用户程序所在位置.不同平台设置方式有所不同. Unix Bash (Linux, Mac, etc.): $ export FLASK_APP=hello $ flask run Windows CMD: > set FLASK_APP=hello > flask run Windows PowerShell: > $env:FLASK_APP="hello" >

安装vue命令行工具(CLI),npm WARN

安装vue-cli的时候,npm给出警告: npm WARN deprecated [email protected]: If using 2.x branch, please upgrade to at least 2.1.6 to avoid a serious bug with socket data flow and an import issue introduced in 2.1.0 解决方案: 降低npm版本 sudo npm install -g [email protected

Apache Commons CLI 开发命令行工具示例

概念说明Apache Commons CLI 简介 虽然各种人机交互技术飞速发展,但最传统的命令行模式依然被广泛应用于各个领域:从编译代码到系统管理,命令行因其简洁高效而备受宠爱.各种工具和系统都 提供了详尽的使用手册,有些还提供示例说明如何二次开发.然而关于如何开发一个易用.强壮的命令行工具的文章却很少.本文将结合 Apache Commons CLI,通过一个完整的例子展示如何准备.开发.测试一个命令行工具.希望本文对有相关需求的读者能有所帮助.      Apache Commons CL

巧用命令行工具UCloud CLI,轻量操作API管理云资源

截止目前,UCloud已提供Python/Java/Golang等不同语言的API SDK.为进一步降低用户的运维人力投入,又推出了基于Golang SDK的命令行工具CLI(Command Line Interface),提供轻量化的API命令行调用方式,并在GitHub开源(https://github.com/ucloud/ucloud-cli).CLI的命令行交互方式更符合研发运维的操作习惯,并且一些典型使用场景通过CLI也更容易代码化的沉淀和维护. 下面是一些用户遇到的实际场景, 用C

推荐给开发人员的6个实用命令行工具

推荐给开发人员的6个实用命令行工具 作为一名Web开发者,当程序出现问题时日子总不是那么好过.问题可能无处不在,可能是你发送的请求出了错,可能是回复出了错,可能是你使用的某个第三方库出了问题,又或者是一个外部API调用失败了.优秀的工具对于定位问题出在何处有着无可估量的价值,而且能在一开始就帮助我们阻止问题的出现,总的来说能使我们的工作更有效率.命令行工具尤其有用,因为它们非常易于做自动化和脚本处理,能够以各种不同的方式进行组合和重用.本文介绍了6个非常强大且灵活的工具,熟练使用这些工具能使你的

Go使用flag包开发命令行工具

flag包是Go语言标准库提供用来解析命令行参数的包,使得开发命令行工具更为简单 常用方法 1.flag.Usage 输出使用方法,如linux下ls -h的帮助输出 2.flag.Type(参数名, 默认值, 使用提示) Type为类型 如String, Int, Uint 调用相应的flag.Sring flag.Int flag.Uint方法 方法返回相应类型的指针 3.flag.Type(指针, 参数名, 默认值, 使用提示) 与flag.Type方法基本相同,不同的是多一个指针参数,将