goctl template一定制化服务配置生成

官网介绍:

模板(Template)是数据驱动生成的基础,所有的代码(rest api、rpc、model、docker、kube)生成都会依赖模板, 默认情况下,模板生成器会选择内存中的模板进行生成,而对于有模板修改需求的开发者来讲,则需要将模板进行落盘, 从而进行模板修改,在下次代码生成时会加载指定路径下的模板进行生成。

简单来水goctl template可以一键化生成api,rpc,model的配置文件,在之前的demo中都是使用如下命令生成代码:

## 生成api
goctl api new demo

## 生成rpc
goctl rpc new demo

以及其他CLI命令

goctl template一定制化服务配置生成_第1张图片
每需要一个配置文件都需要使用对应的cli是很麻烦的,而且会生成许多不需要的文件,goctl就可以一键化生成所有的配置文件,而无需调用单个的cli生成命令。

goctl template一定制化服务配置生成_第2张图片
对于windows的开发,在安装了goctl的情况下,直接使用goctl template init会在用户目录生成一个文件.goctl

goctl template一定制化服务配置生成_第3张图片
进入该目录是一个以goctl版本为名称的目录,复制该目录到项目下:

goctl template一定制化服务配置生成_第4张图片

那么常用的api,rpc文件夹就是生成api服务,rpc服务的模板

goctl template一定制化服务配置生成_第5张图片
通过这些定义了服务的模板就可以生成对应的目录和文件,那么如何通过该这些tpl模板生成源文件呢?

给任意goctl命令添加–home 选项指定templete目录就可以根据tpl模板生成对应的配置文件。

goctl template一定制化服务配置生成_第6张图片
通过goctl api -home [tmmplate_path] -o [output_path]

在这里插入图片描述

tmmplate_path是从.goctl复制到项目的目录,也就是goctl版本为目录的上一级目录;output_path是输出目录。

如下是初始目录,只有goctl的template目录

goctl template一定制化服务配置生成_第7张图片
使用goctl api -home命令,如下

goctl api -home ./goctltpl -o C:\xwh\go-learn\goctl-tpl\demoapi.api

在这里插入图片描述
在设置的输出目录生成了api文件,注意文件一定要带上.api后缀,不然生成的文件没有后缀。
goctl template一定制化服务配置生成_第8张图片
如下所示生成了api文件

goctl template一定制化服务配置生成_第9张图片

通过goctl template生成了一个api文件,api文件是构建api服务的关键,那么可以看出,goctl template的作用是用来定制化api服务。

goctl api go --api [dir] --dir [target]可知生成一个api服务目录,如下

goctl template一定制化服务配置生成_第10张图片
但是其内部的内容是不变的,不了在任何位置使用插件都是一样的,但是通过tpl文件就可以定制化操作,生成自定义的目录结构。

通过go template init生成goctl template文件后,每个tpl文件修改,如下

goctl template一定制化服务配置生成_第11张图片
tpl文件和生成api目录部分对应,有些实现了融合,对tpl修改之后在使用goctl api go --api [dir] --dir [target] --home [tpl目录]就不再生成默认的目录结构了,而是定制的目录结构。

例如,不指定定制的goctl template是任然通过默认的生成

goctl template一定制化服务配置生成_第12张图片
goctl template一定制化服务配置生成_第13张图片

如下所示,实现定制化配置:

  1. 修改部分tpl
    goctl template一定制化服务配置生成_第14张图片
    goctl template一定制化服务配置生成_第15张图片

  2. 使用修改后的tpl配置
    在这里插入图片描述

  3. 查看是否完成

配置生效,多出了tpl的配置
goctl template一定制化服务配置生成_第16张图片
方法生效,多出了之前的配置
goctl template一定制化服务配置生成_第17张图片
使用go template实现了定制的服务代码自动生成。

你可能感兴趣的:(#,go-zero,go-zero)