您的位置:首页 > 娱乐 > 明星 > 重庆最著名的十大景点_手机设计装修图的app_做个公司网站大概多少钱_泰安网站优化公司

重庆最著名的十大景点_手机设计装修图的app_做个公司网站大概多少钱_泰安网站优化公司

2025/2/23 20:07:58 来源:https://blog.csdn.net/qq_39354140/article/details/144154816  浏览:    关键词:重庆最著名的十大景点_手机设计装修图的app_做个公司网站大概多少钱_泰安网站优化公司
重庆最著名的十大景点_手机设计装修图的app_做个公司网站大概多少钱_泰安网站优化公司

前提

go环境的配置、goctl的安装、go-zero的基本使用默认都会

需求

go-zero框架中,默认使用goctl命令生成的代码并没有统一响应格式,现在使用自定义模板实现统一响应格式:

{"code": 0,"msg": "OK","data": {}
}

步骤

1、下载模板

goctl template init

默认下载路径会在C盘
在这里插入图片描述
在这里插入图片描述

2、移动模板

将下载好的模板文件移动到项目目录中,以便后续操作,移动后的项目结构如下:
在这里插入图片描述

3、创建统一响应结构体

创建utils包、再创建统一响应结构体reponse.go
在这里插入图片描述

package utilsimport ("net/http""github.com/zeromicro/go-zero/rest/httpx"
)type Body struct {Code int         `json:"code"`Msg  string      `json:"msg"`Data interface{} `json:"data,omitempty"`
}func Response(w http.ResponseWriter, resp interface{}, err error) {var body Bodyif err != nil {body.Code = -1body.Msg = err.Error()} else {body.Msg = "OK"body.Data = resp}httpx.OkJson(w, body)
}

4、修改handler模板

将刚刚通过goctl template下载的模板中的handler.tpl替换成如下内容:
在这里插入图片描述

package {{.PkgName}}import ("net/http""gozero_gorm/utils""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.Error(w, err)return}{{end}}l := {{.LogicName}}.New{{.LogicType}}(r.Context(), svcCtx){{if .HasResp}}resp, {{end}}err := l.{{.Call}}({{if .HasRequest}}&req{{end}}){{if .HasResp}}utils.Response(w, resp, err){{else}}response.Response(w, nil, err){{end}} // 换成自己的结构体路径}
}

如果你定义的统一相应结构体在其他路径下,只需修改最后一行代码即可

{{if .HasResp}}utils.Response(w, resp, err){{else}}response.Response(w, nil, err){{end}} // 换成自己的结构体路径

5、生成代码

goctl api go --api .\index.api --dir . --home ..\template\

相比普通的api生成该命令指定了使用的模板,也就是 --home ..\template\这一项,由于模板中的handler.tpl已经被修改,所以生成后的代码会返回统一的响应格式

测试

在这里插入图片描述
可以看到响应结果如期望的那样

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com