iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 17
1
Modern Web

從無到有,使用 Go 開發應用程式系列 第 17

Commands and Flags

在開始正式寫假文產生器前,我們先來看看哪些子命令和參數是需要定義的。

分析

找了一下套件說明,看起來只要把這個值代入 Command 結構的 slice 即可有子命令:

app.Commands = []cli.Command{}

另外還會需要參數,比方說一次想要產生的數量有多少, appCommand 都有一個值域叫 Flags ,只要給它 Flag 結構的 slice 即可:

app.Flags = []cli.Flag{
    cli.StringFlag{
        Name:  "num",
        Value: "10",
        Usage: "產生數量",
    },
}

取 Flags 的方法如下:

func(c *cli.Context) error {
    fmt.Println(c.String("num"))

    return nil
}

開工

先定義兩個子命令 generatestatus ,而 generate 定義一個 flags 是 num ,另外把它抽出另一個函式初始化:

package main

import (
	"fmt"
	"os"
	"github.com/urfave/cli"
)

func main() {
	app := cli.NewApp()
	app.Name = "Namer"
	app.Commands = commands()

	app.Run(os.Args)
}

func commands() []cli.Command {
	return []cli.Command{
		{
			Name:  "generate",
			Usage: "產生假名",
			Flags: []cli.Flag{
				cli.StringFlag{
					Name:  "num",
					Value: "10",
					Usage: "產生數量",
				},
			},
			Action: func(c *cli.Context) error {
				fmt.Println("Hello Generate")
				fmt.Println("Generate " + c.String("num"))

				return nil
			},
		},
		{
			Name:  "status",
			Usage: "狀態",
			Action: func(c *cli.Context) error {
				fmt.Println("Hello Status")

				return nil
			},
		},
	}
}

展示

執行:

$ go run main.go generate
Hello Generate
Generate 10

$ go run main.go generate --num 1000
Hello Generate
Generate 1000

Flags 和 Args 好像只能吃字串,不過這問題並不大,而且也蠻正常的,之後再來解吧。

詳細程式可以參考 PR Day 17


上一篇
Dep
下一篇
Random
系列文
從無到有,使用 Go 開發應用程式30

尚未有邦友留言

立即登入留言