当前位置: 首页 > article >正文

go-zero使用自定义模板实现统一格式的 body 响应

前提

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

需求

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

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

步骤

1、下载模板

goctl template init

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

2、移动模板

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

3、创建统一响应结构体

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

package utils

import (
	"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 Body
	if err != nil {
		body.Code = -1
		body.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已经被修改,所以生成后的代码会返回统一的响应格式

测试

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


http://www.kler.cn/a/417481.html

相关文章:

  • 115,【7】 攻防世界 web fileinclude
  • Windows电脑本地部署运行DeepSeek R1大模型(基于Ollama和Chatbox)
  • 使用线性回归模型逼近目标模型 | PyTorch 深度学习实战
  • 【优先算法】专题——位运算
  • CNN的各种知识点(四): 非极大值抑制(Non-Maximum Suppression, NMS)
  • Chromium132 编译指南 - Android 篇(一):编译前准备
  • 如何利用Java爬虫获取1688关键词接口数据
  • Linux常用操作之vim快捷操作
  • 【QNX+Android虚拟化方案】129 - USB眼图参数配置
  • Unity ShaderLab 实现3D物体描边
  • Mybatis:CRUD数据操作之单条件查询
  • YOLO模型训练后的best.pt和last.pt区别
  • HTML技术深度解析:构建现代网页的基石
  • redis-bitmap使用详解
  • kubernetes——part3-2 集群声明式文件YAML
  • STL简介
  • 短视频账号矩阵系统源码--独立saas技术部署
  • 计算机视觉工程师紧张学习中!
  • keil 5. Flash Timeout. Reset the Target and try it again.
  • css—动画
  • Unix网络编程笔记(一、简介和TCP/IP)
  • ProtonBase 教育行业解决方案
  • ARM架构下安装新版docker及docker-compose
  • 渗透测试kali虚拟机分享(附网盘链接)
  • 创建maven私人创库nexus
  • 如何全面备份你的Mac电脑:邮件、联系人、桌面文件和Safari书签