代码拉取完成,页面将自动刷新
package command
import (
"fmt"
"html/template"
"os"
"path/filepath"
"strings"
"gitee.com/mrwhen/gone/framework/cobra"
"gitee.com/mrwhen/gone/framework/contract"
"gitee.com/mrwhen/gone/framework/util"
"github.com/AlecAivazis/survey/v2"
"github.com/jianfengye/collection"
"github.com/pkg/errors"
)
// 初始化command相关命令
func initCmdCommand() *cobra.Command {
cmdCommand.AddCommand(cmdListCommand)
cmdCommand.AddCommand(cmdCreateCommand)
return cmdCommand
}
// 二级命令
var cmdCommand = &cobra.Command{
Use: "command",
Short: "控制台命令相关",
RunE: func(c *cobra.Command, args []string) error {
if len(args) == 0 {
c.Help()
}
return nil
},
}
// cmdListCommand 列出所有的控制台命令
var cmdListCommand = &cobra.Command{
Use: "list",
Short: "列出所有控制台命令",
RunE: func(c *cobra.Command, args []string) error {
cmds := c.Root().Commands()
ps := [][]string{}
for _, cmd := range cmds {
line := []string{cmd.Name(), cmd.Short}
ps = append(ps, line)
}
util.PrettyPrint(ps)
return nil
},
}
// cmdCreateCommand 创建一个业务控制台命令
var cmdCreateCommand = &cobra.Command{
Use: "new",
Aliases: []string{"create", "init"}, // 设置别名为 create init
Short: "创建一个控制台命令",
RunE: func(c *cobra.Command, args []string) error {
container := c.GetContainer()
fmt.Println("开始创建控制台命令...")
var name string
var folder string
{
prompt := &survey.Input{
Message: "请输入控制台命令名称:",
}
err := survey.AskOne(prompt, &name)
if err != nil {
return err
}
}
{
prompt := &survey.Input{
Message: "请输入文件夹名称(默认: 同控制台命令):",
}
err := survey.AskOne(prompt, &folder)
if err != nil {
return err
}
}
if folder == "" {
folder = name
}
// 判断文件不存在
app := container.MustMake(contract.AppKey).(contract.App)
pFolder := app.CommandFolder()
subFolders, err := util.SubDir(pFolder)
if err != nil {
return err
}
subColl := collection.NewStrCollection(subFolders)
if subColl.Contains(folder) {
fmt.Println("目录名称已经存在")
return nil
}
// 开始创建文件
if err := os.Mkdir(filepath.Join(pFolder, folder), 0700); err != nil {
return err
}
// 创建title这个模版方法
funcs := template.FuncMap{"title": strings.Title}
{
// 创建name.go
file := filepath.Join(pFolder, folder, name+".go")
f, err := os.Create(file)
if err != nil {
return errors.Cause(err)
}
// 使用contractTmp模版来初始化template,并且让这个模版支持title方法,即支持{{.|title}}
t := template.Must(template.New("cmd").Funcs(funcs).Parse(cmdTmpl))
// 将name传递进入到template中渲染,并且输出到contract.go 中
if err := t.Execute(f, name); err != nil {
return errors.Cause(err)
}
}
fmt.Println("创建新命令行工具成功,路径:", filepath.Join(pFolder, folder))
fmt.Println("请记得开发完成后将命令行工具挂载到 console/kernel.go")
return nil
},
}
// 命令行工具模版
var cmdTmpl string = `package {{.}}
import (
"fmt"
"gitee.com/mrwhen/gone/framework/cobra"
)
var {{.|title}}Command = &cobra.Command{
Use: "{{.}}",
Short: "{{.}}",
RunE: func(c *cobra.Command, args []string) error {
container := c.GetContainer()
fmt.Println(container)
return nil
},
}
`
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。