创建多版本api解决方案
这里的
v1
是固定参数,所以这里有问题
可以通过 createFileFromStub
的 variables
参数来解决
如下:
模板里面修改为动态参数
生成模板时把版本号也传过去
ps:如果 v2
目录不存在则需要提前创建目录
附上我自己的代码,和教程有出入,如需详细可以私信我
package make
import (
"fmt"
"github.com/spf13/cobra"
"github.com/sreio/gohub/pkg/console"
"os"
"strings"
)
var version string
var CmdMakeAPIController = &cobra.Command{
Use: "apicontroller",
Short: "Create api controller",
Run: runMakeAPIController,
Args: cobra.ExactArgs(1),
Example: "make apicontroller user --v=2",
}
func init() {
CmdMakeAPIController.PersistentFlags().StringVarP(&version, "version", "v", "1", "api version")
}
func runMakeAPIController(command *cobra.Command, args []string) {
dirs := strings.Split(args[0], "/")
if len(dirs) > 3 {
console.Exit("The directory supports up to three levels only, And the last name is the file name")
}
// Api Version Directory
version = fmt.Sprintf("v%s", version)
// File Directory
dirPath := fmt.Sprintf("app/http/controllers/%s/", version)
if len(dirs) > 1 {
for i := 0; i < len(dirs)-1; i++ {
dirPath += dirs[i] + "/"
}
}
// Create a directory if it does not exist
err := os.MkdirAll(dirPath, os.ModePerm)
if err != nil {
console.ExitIf(err)
}
// Generate a cmd.Model instance
model := makeModelFromString(dirs[len(dirs)-1])
// File Name
fileName := fmt.Sprintf("%s_controller.go", model.PackageName)
// Generate documents from templates
createFileFromStub(dirPath+fileName, "apicontroller", model, map[string]string{"{{version}}": version})
console.Success("please edit app/http/controllers/base_controller.go's controllers.ApiController struct to register api")
}
推荐文章: