golang cli命令行框架使用

簡介
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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章