Hello,我是Rocket
这是我参与更文挑战的第2天,活动详情查看:2021最后一次更文挑战
引言
- 新增支持生成command、service、controller、view,源码就在项目里
- github传送门
- 喜欢的铁子们给点个star
- 没有看过上一篇文章的老铁们从这进传送门
- tpl模板在cmd/tpl下
1、make:command 生成命令
代码在cmd/make-command.go
核心方法:util.CommandCreate
1、判断文件是否存在
2、生成文件
3、通过text/template 写入文件内容
func CommandCreate(use, fileName, cmdName, cmdParent string) error {
cmdFilePath := fmt.Sprintf("%s.go", fileName)
cmdFile, err := tool.CreateFile(cmdFilePath)
if err != nil {
return err
}
defer cmdFile.Close()
c := commandStruct{
Use: use,
CmdName: cmdName,
CmdParent: cmdParent,
}
commandTemplate := template.Must(template.New("sub").Parse(tpl.AddCommandTemplate()))
err = commandTemplate.Execute(cmdFile, c)
if err != nil {
return err
}
return nil
}
复制代码
2、make:service 生成服务层
代码在cmd/make-service.go
核心代码:util.ServiceCreate
func ServiceCreate(model, fileName, path string) (string, error) {
...省略
//简析model
s := serviceStruct{
Package: Package, //tpl里{{.Package}}
ModelImport: ModelImport,
ModelName: ModelName,
ModelStruct: ModelStruct, //类似models.SysMenu
}
serviceTemplate := template.Must(template.New("ser").Parse(tpl.ServiceTemplate()))
err = serviceTemplate.Execute(File, s)
if err != nil {
return path + fileName, err
}
return path + fileName, nil
}
复制代码
3、make:controller 生成控制器层
代码在cmd/make-controller.go
核心代码:util.ControllerCreate
func ControllerCreate(path, name, model, service string) (string, error) {
...省略
s := controllerStruct{
Package: Package,
ControllerName: ControllerName,
ViewName: ViewName,
Name: name,
ModelImport: ModelImport,
ModelStruct: ModelStruct,
ServiceImport: serviceImport,
ServicePackage: servicePackage,
ServiceName: serviceName,
}
controllerTemplate :=template.Must(template.New("ser").Parse(tpl.ControllerTemplate()))
err = controllerTemplate.Execute(File, s)
if err != nil {
return fileName, err
}
return fileName, nil
}
复制代码
4、make:view 生成视图
代码在cmd/make-view.go
核心代码:
func ViewCreate(path, desc string) error {
...省略
v := viewStruct{
Default: path,
Desc: desc,
}
controllerTemplate := template.Must(template.New("view").Delims("<!--{", "}-->").Parse(tpl.ViewTemplate()))
err = controllerTemplate.Execute(File, v)
if err != nil {
return err
}
return nil
}
复制代码
5、后续计划
下一篇文章准备给大家整合cmd命令,10分钟快速实现一个功能的增删改查(包括页面、权限、按钮、弹窗等等)