21

golang cli命令行框架使用

 4 years ago
source link: https://studygolang.com/articles/24508
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

简介

cli提供了简单快速的命令行功能的开发。在应用中通过命令设定参数和配置是基本需求。Cli可以帮助快速构建命令行功能。

安装

go get github.com/urfave/cli

简单示例

package main

import (
    "fmt"
    "os"

    "github.com/urfave/cli"
)

func main() {
    app := cli.NewApp()
    app.Name = "sysconfig"
    app.Usage = "Setting basic configuration"
    app.Version = "0.0.1"

    app.Action = func(c *cli.Context) error {
        fmt.Println("Prepare applying basic configuration")
        return nil
    }

    app.Run(os.Args)
}

编译后执行测试

./cli -h
NAME:
   sysconfig - Setting basic configuration

USAGE:
   cli [global options] command [command options] [arguments...]

VERSION:
   0.0.1

COMMANDS:
   help, h  Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --help, -h     show help
   --version, -v  print the version

可以看到Action的部分没有执行

命令行不带-h 或 -v

./cli
Prepare applying basic configuration

可以看到Action的部分被执行

指定要设定的参数使用cli.flags进行参数设定

在应用中要指定MySQL地址或者debug用的port可以使用

cli --mysqlurl 192.168.111.11 --debugport 6666

或者

cli -url 192.168.111.11 -dp 6666

示例

package main

import (
    "fmt"
    "os"

    "github.com/urfave/cli"
)

func main() {
    var mysqlUrl string
    var debugPort uint
    app := cli.NewApp()
    app.Name = "sysconfig"
    app.Usage = "Setting basic configuration"
    app.Version = "0.0.1"

    app.Flags = []cli.Flag{
        cli.StringFlag{
            Name:        "mysqlurl, url",
            Usage:       "specify mysql address",
            Value:       "182.122.11.11",
            Destination: &mysqlUrl,
        },
        cli.UintFlag{
            Name:        "debugport, dp",
            Usage:       "specify debug port",
            Value:       9666,
            Destination: &debugPort,
        },
    }

    app.Action = func(c *cli.Context) error {
        fmt.Println("Prepare applying basic configuration")

        fmt.Println("MySQL Url:", mysqlUrl)
        fmt.Println("Debug port:", debugPort)
        return nil
    }

    app.Run(os.Args)
}

编译后执行

./cli --mysqlurl 192.168.128.122 --debugport 76554
Prepare applying basic configuration
MySQL Url: 192.168.128.122
Debug port: 76554

可以看到mysqlUrl和debugPort已经被赋值为在命令行输入的参数

使用command

例如要设定debug的等级,mysql中查询userid对应的用户信息可以用如下格式的输入

./cli debug grade 2
./cli mysql query 12345

示例代码如下

package main

import (
    "fmt"
    "os"

    "github.com/urfave/cli"
)

func main() {
    app := cli.NewApp()
    app.Name = "sysconfig"
    app.Usage = "Setting basic configuration"
    app.Version = "0.0.1"

    app.Commands = []cli.Command{
        {
            Name:    "debug",
            Aliases: []string{"d"},
            Usage:   "debug settings",
            Subcommands: []cli.Command{
                {
                    Name:  "grade",
                    Usage: "set debug grade",
                    Action: func(c *cli.Context) error {
                        fmt.Println("Set debug grade to ", c.Args().First())
                        return nil
                    },
                },
            },
        },
        {
            Name:    "mysql",
            Aliases: []string{"q"},
            Usage:   "mysql operations",
            Subcommands: []cli.Command{
                {
                    Name:  "query",
                    Usage: "query userid",
                    Action: func(c *cli.Context) error {
                        fmt.Println("query userid=", c.Args().First())
                        return nil
                    },
                },
            },
        },
    }

    app.Run(os.Args)
}

编译后执行

./cli d grade 2
Set debug grade to  2

./cli q query 3415
query userid= 3415

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK