Cmd 控制器
home 模块提供了一个 cmd 的 hello world 程序,cmd 中我们使用了 cobra 命令行类库。所以 cobra 对象的使用可以直接参考官方文档,我们在这里主要帮你完成了路由注册和参数注册。
1. 路由注册
func init() {
    homeCmd := new(HomeCmd)
    // 注册路由
    yago.AddCmdRouter("demo", "Demo action", homeCmd.DemoAction, yago.CmdArg{
        Name: "arg", Shorthand: "a", Value: "value", Usage: "参数", Required: true,
    })
}
init 函数内完成了 Action 级别的路由注册。cmd 路由注册主要通过 yago.AddCmdRouter 这个函数来完成。参数含义如下表格
AddCmdRouter 参数说明
| 参数位置 | 参数类型 | 说明 | 
|---|---|---|
| 1 | String | 命令行路径 | 
| 2 | String | 命令简要说明 | 
| 3 | Func | 命令行对应的 Action Func | 
| >=4 | yago.AddCmdRouter | 命令行flag参数对象 可以配置参数的名称,缩写,默认值,参数含义,是否必须  | 
2. CmdAction
Cmd Action 接收两个参数一个 cmd *cobra.Command 用来获取 flag 参数,另外一个 args 用来获取非 flag 参数。
func (c *HomeCmd) DemoAction(cmd *cobra.Command, args []string) {
    if arg, err := cmd.Flags().GetString("arg"); err != nil {
        fmt.Println(err)
    } else {
        fmt.Println("arg: " + arg)
    }
}
3. CmdArg
cmd 支持多个类型的参数,目前支持的类型如下
| 参数类型 | CmdArg | 说明 | 
|---|---|---|
| string | CmdArg | 字串, eg. -s=hello | 
| int | CmdIntArg | 整型,eg. -i=10 | 
| int64 | CmdInt64Arg | 64整型, eg. -x=64 | 
| bool | CmdBoolArg | 布尔类型,eg. -b=false | 
| float | CmdFloat64Arg | 浮点类型,eg. -f=3.14 | 
| duration | CmdDurationArg | 时间类型,eg. -d=10s | 
| string slice | CmdStringSliceArg | 字串数组,eg. -y=a,b,c | 
| int slice | CmdIntSliceArg | 整型数组,eg. -z=1,2,3 |