# 命令

# 指南

hade 允许自定义命令,挂载到 hade 上。并且提供了./hade command 系列命令。

[~/Documents/workspace/hade_workspace/demo5]$ ./hade command
all about commond

Usage:
  hade command [flags]
  hade command [command]

Available Commands:
  list        show all command list
  new         create a command

Flags:
  -h, --help   help for command

Use "hade command [command] --help" for more information about a command.
  • list // 列出当前所有已经挂载的命令列表
  • new // 创建一个新的自定义命令

# 创建

创建一个新命令,可以使用 ./hade command new

这是一个交互式的命令行工具。

[~/Documents/workspace/hade_workspace/demo5]$ ./hade command new
create a new command...
? please input command name: test
? please input file name(default: command name):
create new command success,file path: /Users/Documents/workspace/hade_workspace/demo5/app/console/command/test.go
please remember add command to console/kernel.go

创建完成之后,会在应用的 app/console/command/ 目录下创建一个新的文件。

# 自定义

hade 中的命令使用的是 cobra 库。 https://github.com/spf13/cobra

package command

import (
        "fmt"

        "github.com/gohade/hade/framework/cobra"
        "github.com/gohade/hade/framework/command/util"
)

var TestCommand = &cobra.Command{
        Use:   "test",
        Short: "test",
        RunE: func(c *cobra.Command, args []string) error {
                container := util.GetContainer(c.Root())
                fmt.Println(container)
                return nil
        },
}

基本上,我们要求实现

  • Use // 命令行的关键字
  • Short // 命令行的简短说明
  • RunE // 命令行实际运行的程序

更多配置和参数可以参考 cobra 的 github 页面 (opens new window)

# 挂载

编写完自定义命令后,请记得挂载到 console/kernel.go 中。

func RunCommand(container framework.Container) error {
	var rootCmd = &cobra.Command{
		Use:   "hade",
		Short: "main",
		Long:  "hade commands",
	}

	ctx := commandUtil.RegiestContainer(container, rootCmd)

	hadeCommand.AddKernelCommands(rootCmd)

    rootCmd.AddCommand(command.DemoCommand)

	return rootCmd.ExecuteContext(ctx)
}