创建多版本api解决方案

Go

Go

这里的 v1 是固定参数,所以这里有问题

可以通过 createFileFromStubvariables 参数来解决

如下:

  1. 模板里面修改为动态参数
    Go

  2. 生成模板时把版本号也传过去

Go

ps:如果 v2 目录不存在则需要提前创建目录

Go

附上我自己的代码,和教程有出入,如需详细可以私信我

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")
}
sreio
讨论数量: 3
sreio
if ok := policies.CanModify{{StructName}}(c, {{VariableName}}Model); !ok {
        response.Abort403(c)
        return
    }

另外这部分代码教程里面我怎么没有印象,是我失忆了么 :flushed:

policies 验证是在哪一章啊,求告知 ths :see_no_evil:

1年前 评论
sreio (作者) (楼主) 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!