簡介
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