go-zero模板编写并生成

go-zero模板编写并生成

概述

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

使用方法

1.初始化模板到本地
goctl template init --home $HOME/template

注意:如果不指定–home 他会初始化到$HOME/.goctl

2.编写tpl模板,修改成自己的模板

例如:修改handler.tpl文件;我是想实现统一格式的body响应

package {{.PkgName}}import (
    "net/http"
    "故意写错" //写自己response包的包名,这里可以故意写错,让编译器自动import或者是自己写。一般来说项目不同包路径肯定不同
    "github.com/zeromicro/go-zero/rest/httpx"
    {{.ImportPackages}}
)func {{.HandlerName}}(svcCtx *svc.ServiceContext) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        {{if .HasRequest}}var req types.{{.RequestType}}
        if err := httpx.Parse(r, &req); err != nil {
            httpx.ErrorCtx(r.Context(), w, err)
            return
        }{{end}}l := {{.LogicName}}.New{{.LogicType}}(r.Context(), svcCtx)
        {{if .HasResp}}resp, {{end}}err := l.{{.Call}}({{if .HasRequest}}&req{{end}})
        {{if .HasResp}}response.Response(w, resp, err){{else}}response.Response(w, nil, err){{end}}
    }
}
3.使用tpl模板生成代码
goctl api go --api order.api --dir . --home ../../../template

前面的大家都很熟悉了 --api是被指定生成的api文件;--dir是生成代码的目录;--home就是生成代码指定的模板

总结

  1. 如果只想维护一份模板,那么我们初始化模板的时候和生成代码的时候都不用指定–home了,默认的模板tpl文件在.goctl里面初始化模板的时候会提示你在哪 Templates are generated in C:\Users\wangzhirong.goctl\1.5.0, edit on your risk!
  2. 关于引用包名;一般来说除非是开源的包,我们可以直接指定写,但是有些包是项目内的包,模板直接指定的话换了项目就不行了;而且容易出错,所以我们可以直接写错,直接爆红;让开发知道这里是需要自己import的,也可以让编译器自动识别帮你import
  3. 已经存在的代码不会再生成;例如我已经生产了一套代码;现在想用另外的模板生成,只能是把文件删除了然后再生成
  4. 在模板中添加文件是不生效的,只能是修改他已有的tpl文件
  5. –remote远端模板;官方的模板最新的是1.3.8;我们目前用的是1.5.0;这两个好像是一样的。一般情况下不使用远端模板;使用自己本地的就好了;开发者可能是想我们做一套好用的模板,但是目前看来开源的模板都没几个;这个开源 链接只是增加了事务的模板
  6. 对于模板的其他操作;例如回滚、清除。回滚其实就是把你修改的东西不要了,要回初始的;清除就是把你的template文件删除了。

写到这里发现我们以前在生成MongoDB的时候就很需要修改模板!!

找到mongo/model_types.tpl 里面是:

type {{.Type}} struct {
    ID primitive.ObjectID `bson:"_id,omitempty" json:"id,omitempty"`
    // TODO: Fill your own fields
    UpdateAt time.Time `bson:"updateAt,omitempty" json:"updateAt,omitempty"`
    CreateAt time.Time `bson:"createAt,omitempty" json:"createAt,omitempty"`
}

发现UpdateAt和CreateAt被他固定生成了,很多时候我们都是不需要的;但他会帮我们生成;而且crud的代码存在下面这样的赋值,如果我们生成后再把type里面的删除,下面的代码会爆红;struct代码可以修改;但是crud的代码是NOT EDIT;所以我们需要修改mongo的模板;

 data.CreateAt = time.Now()
 data.UpdateAt = time.Now()
​
 data.UpdateAt = time.Now()"time"

在模板中删除上面的代码;然后重新生成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值