go-zero(五) 模板定制

go-zero 模板定制

goctl 代码生成是基于 go 的模板去实现数据驱动的,实际开发中,使用goctl 生成的代码,并不符合我们的需求。

例如,我们刚刚的使用错误管理,我们需要在handler中返回的错误信息。

一、生成模板

首先,我们需要初始化模板文件。通过运行goctl template init 命令,可以将模板文件下载到本地。

sql2pb>goctl template init -home ./
  • home 是存储模板的路径

执行命令后,指定目录中会生成以下文件和文件夹结构:

├─api
├─docker
├─gateway
├─kube
├─model
├─mongo
├─newapi
└─rpc

这些目录对应了go-zero中不同模块的模板,提供了服务生成的基本结构。

二、修改模板

这里我们演示如何修改handler.tpl模板,以便在处理请求时返回更合适的错误信息。

打开handler.tpl文件,可以看到生成的代码框架。我们将在处理请求时引入新的错误处理逻辑,使其更符合业务需求。以下是修改后的模板代码:

package {{.PkgName}}import ("net/http"xhttp "github.com/zeromicro/x/http"  //导入zeromicro库"github.com/zeromicro/go-zero/rest/httpx"{{.ImportPackages}}
){{if .HasDoc}}{{.Doc}}{{end}}
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)xhttp.JsonBaseResponseCtx(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 err != nil {//httpx.ErrorCtx(r.Context(), w, err)xhttp.JsonBaseResponseCtx(r.Context(), w, err)} else {{{if .HasResp}}xhttp.JsonBaseResponseCtx(r.Context(), w, resp){{else}}httpx.Ok(w){{end}}}}
}

修改说明

  • 我们使用了 xhttp.JsonBaseResponseCtx 方法来返回错误信息,这样可以确保客户端得到统一风格的错误响应。
  • 处理请求的逻辑保留了原有结构,但在错误处理的方式上作了调整,以更好地符合业务需求。

自定义规则:

  • 在 goctl 提供的有效数据范围内修改,即不支持外部变量
  • 不支持新增模板文件
  • 不支持变量修改

三、根据模板生成代码

完成模板的修改后,可以使用 goctl命令来生成新代码。以下是命令示例:

goctl api go --api user.api --dir ./  --home ../sql2pb    

--home 指定我们刚刚下载的模板路径, 默认值为 ${HOME}/.goctl

在代码生成完成后,我们可以查看生成的 handler 文件,以确认我们的修改是否成功。新的 handler 文件应当能够根据我们自定义的模板返回整洁的错误响应。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/19067.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

ICML24最新开源时序基础模型MOMENT

论文标题:MOMENT: A Family of Open Time-series Foundation Models 论文链接:https://arxiv.org/pdf/2402.03885 前言 当前时间序列数据上预训练大型模型面临以下挑战:(1) 缺乏大型且统一的公共时间序列数据集,(2) 时间序列特…

Flink和Spark的区别是什么?各自的应用场景是什么?

一、Flink是什么? Flink:Flink 是一个分布式流处理框架,其架构基于流计算,将一切都看作是流。它采用了一种基于事件驱动的架构,数据以流的形式源源不断地进入系统,并且能够实时处理这些数据。例如&#xf…

2024.11.18晚Linux复习课笔记

第一章 cat -n显示行号 -b不显示空行号 pwd 打印当前的工作目录 cd ls 打印当前工作的所有文件 -a -A -l:显示当前文件的详细信息 -r:递归显示 passwd:修改密码 ip a 查看ip地址 poweroff shutdown -h 关机 reboot shutdown -r 第二章 man --help …

基于Spring Boot+Unipp的博物馆预约小程序(协同过滤算法、二维码识别)【原创】

🎈系统亮点:协同过滤算法、二维码识别; 一.系统开发工具与环境搭建 1.系统设计开发工具 后端使用Java编程语言的Spring boot框架 项目架构:B/S架构 运行环境:win10/win11、jdk17 前端: 技术:框…

Scaling Law的“终结“还是新起点?——开源实践者的深度思考

作者:宋大宝,与大宝同学因那篇《回顾总结展望「融合RL与LLM思想,探寻世界模型以迈向AGI」》结识于今年春天,虽我们当时某些思想观念有些出入,也碰撞出了很多火花与共鸣,并持续地相互启发的走到了现在。他是…

【qt】控件4

1.Qradiobutton(单选按钮) ui界面有三个按钮,应该文本框,根据不同的按钮来改变不同文本框的内容 根据不同的单选按钮改变不同的文本框。 Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);ui->radioB…

Day02_AJAX综合案例 (黑马笔记)

Day02_AJAX综合案例 目录 Day02_AJAX综合案例 学习目标 01.案例_图书管理-介绍 目标 讲解 小结 02.Bootstrap 弹框_属性控制 目标 讲解 小结 03.Bootstrap 弹框_JS控制 目标 讲解 小结 04.案例_图书管理_渲染列表 目标 讲解 小结 05.案例_图书管理_新增图书…

六、代码生成,《编译原理》(本科教学版),第2版

文章目录 零、前言0.1 编译器前端到后端 一、代码生成1.1 代码生成的任务1.2 给数据分配计算资源1.3 给代码选择合适的机器指令1.4 栈式计算机1.4.1 栈式计算机Stack的结构1.4.2 栈计算机的指令集1.4.3 变量的内存分配伪指令1.4.4 栈式计算机的代码生成1.4.4.1 递归下降代码生成…

Android集成FCM(Firebace Cloud Messaging )

集成FCM官方文档 Firebace主页面 将 Firebase 添加到您的 Android 应用 1、进入Firebace页面,创建自己的项目 2、点击自己创建好的项目,在右侧选择Cloud Messaging 3、点击Android去创建 google-services.json 4、将下载的 google-services.json 文件…

D2076——一款双通道音频功率放大器【青牛科技】

概述: D2076是一款双通道音频功率放大器,最低工作电压可到1.0V。适用于 便携式小型收音机或立体声耳机作双通道或BTL应用。 主要特点: BTL工作,Po90mW(典型值) 外接元器件少 通过外接PNP三极管作为…

智慧社区平台系统提升物业管理效率与居民生活质量

内容概要 智慧社区平台系统是为应对现代城市管理挑战而诞生的重要工具。随着城市化进程的加快,传统的物业管理方式已经难以满足日益增长的居民需求和管理复杂性。因此,引入智能化管理手段显得尤为重要。这个系统不仅仅是一个简单的软件,它是…

【langchain4j】AIservices能够实现更加灵活的chain

文章目录 AI service介绍如何工作的AiServices提供的能力支持的返回形式 简单的例子:接收用户消息,并按规定返回接收单个变量接收更多动态变量 advanced RAGChaining multiple AI Services:多个AiSerives合并到一起相关教程:[Lang…

JavaScript 中字符串和数组的概念解析与多角度对比区分

文章目录 💯前言💯字符串(String)💯数组(Array)💯字符串与数组的相同点与不同点💯字符串和数组的实际应用场景💯字符串与数组的互转💯字符串和数组…

4K双模MiniLED显示器哪个好

4K双模MiniLED显示器哪个好?现在市面上的4K双模MiniLED显示器太多了,琳琅满目,今天就给大家列举一下7款当下火热到爆炸的品牌,看看4K双模MiniLED显示器哪个好。 4K双模MiniLED显示器哪个好 - HKC G27M7PRO HKC G27M7Pro 是一款性…

每天五分钟深度学习pytorch:批归一化全连接网络完成手写字体识别

本文重点 前面我们学习了普通的全连接神经网络,后面我们学习了带有激活层的全连接神经网络,本文我们继续进一步升级,我们学习带有批归一化的全连接神经网络,批归一化可以加快神经网络的训练速度,减少过拟合,具体它的原理,大家可以看我们的《每天五分钟深度学习》专栏,…

excel打开csv文件乱码的问题

如图所示,在保存csv文件时已指定编码为utf-8,用excel打开后仍然乱码 解决方法: 在保存csv文件时指定编码为utf-8-sig 该编码方式会在文件开头加入一个 BOM(Byte Order Mark),有助于 Excel 正确识别 UTF-8…

QQ音乐 11.3.4 | 魅族定制版,极致简洁,无广告,不限机型

QQ音乐魅族定制版,界面设计极致简洁,没有任何广告干扰,支持听限免歌曲,不限机型使用。用户可以通过微信和QQ直接登录,享受纯净的音乐体验。 大小:94.6M 下载地址: 百度网盘:https:…

使用TensorFlow实现简化版 GoogLeNet 模型进行 MNIST 图像分类

在本文中,我们将使用 TensorFlow 和 Keras 实现一个简化版的 GoogLeNet 模型来进行 MNIST 数据集的手写数字分类任务。GoogLeNet 采用了 Inception 模块,这使得它在处理图像数据时能更高效地提取特征。本教程将详细介绍如何在 MNIST 数据集上训练和测试这…

TON商城与Telegram App:生态融合与去中心化未来的精彩碰撞

随着区块链技术的快速发展,去中心化应用(DApp)逐渐成为了数字生态的重要组成部分。而Telegram作为全球领先的即时通讯应用,不仅仅满足于传统的社交功能,更在区块链领域大胆探索,推出了基于其去中心化网络的…

vulhub之log4j

Apache Log4j Server 反序列化命令执行漏洞(CVE-2017-5645) 漏洞简介 Apache Log4j是一个用于Java的日志记录库,其支持启动远程日志服务器。Apache Log4j 2.8.2之前的2.x版本中存在安全漏洞。攻击者可利用该漏洞执行任意代码。 Apache Log4j 在应用程序中添加日志记录最…