《go-zero云笺密钥录》

《go-zero云笺密钥录》

目录

​编辑

​编辑

一、前言

二、正文

 1.编写api接口

 1.1 fac-contact.api

1.2 fca.api

 2. 编写Handler函数

3. 编写Logic函数 

3.1 base64Captcha.NewDriverDigit()

3.2  base64Captcha.NewCaptcha ()

3.3 Generate()

3.4 Set()

 3.5 具体实现

三、结语


一、前言

        本文将为大家带来go-zero框架下如何实现一个能够随机生成随机数字验证码的api接口

二、正文

 1.编写api接口

        在go-zero框架下要实现一个接口,我们需要先定义一个api文件,在这个文件中声明我们要实现接口的函数名,参数和返回值,如果参数和返回值是自定义类型的的话,我们还需要将具体的类型定义写在api文件中。笔者将生成随机图形验证码的函数,参数和返回值声明在fac-contact.api中,所有的接口api都聚合在一个总的api文件,即fca.api,后续的话就只需要根据这一个fca.api就可以自主生成所有接口后续的handle和logic文件

 1.1 fac-contact.api

@server ( prefix: /api/v1 timeout: 15s group: contact ) service fca-api { @doc( summary: "获取图形验证码" description: "生成并返回图形验证码" ) @handler WebsiteCaptchaHandler // TODO: set handler name and delete this comment get /contact/captcha returns(ContactCaptchaResp) } 

1.2 fca.api

import "fca-contact.api" type ContactCaptchaResp { Data ContactCaptchaRespData `json:"data,omitempty"` } type ContactCaptchaRespData { CaptchaId string `json:"captchaId"` //与验证码对应的ID ImageBase64 string `json:"imageBase64"` //生成的图形验证码 } 
        这里的CaptchaId是为了后续将用户输入的图形验证码与ID对应的图形验证码进行比对,如果相等即说明用户输入正确,相反则说明错误 

在写完api文件后,我们执行下述代码,go-zero框架就可以自主帮我们生成后面的Handle函数和Logic函

goctl api go -api ./fca.api -dir .
注: goctl(Go Control Tool)是 go-zero 框架的代码生成工具,用于自动化生成项目代码、配置文件及部署脚本,主要功能包括:

● 项目脚手架生成:快速创建 API 服务、RPC 服务等基础代码结构。
● 代码生成:根据定义文件(如 .api、.proto)生成模型层、逻辑层、路由层代码3。
● 配置管理:生成与框架兼容的配置文件(如 yaml 格式)。
● 部署支持:生成 Dockerfile 或 Kubernetes 部署模板。

生成API服务

goctl api go -api user.api -dir .
● user.api 文件定义了接口路径、请求/响应结构等。
● 生成代码包含路由、处理函数及中间件框架

Read more

C++第五十一弹---IO流实战:高效文件读写与格式化输出

C++第五十一弹---IO流实战:高效文件读写与格式化输出

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C++详解】 目录 1. C语言的输入与输出 2. 流是什么 3. C++IO流 3.1 C++标准IO流 3.2 C++文件IO流 3.2.1 以写方式打开文件 3.2.1 以读方式打开文件 4 stringstream的简单介绍 1. C语言的输入与输出 C语言中我们用到的最频繁的输入输出方式就是 scanf () 与 printf() 。 scanf(): 从标准输入设备(键盘)读取数据,并将值存放在变量中。printf(): 将指定的文字/字符串输出到标准输出设备(屏幕)。注意宽度输出和精度输出控制。C语言借助了相应的缓冲区来进行输入与输出。

By Ne0inhk
【Linux/C++多进程篇(一) 】一个变两个?揭秘 C/C++ 程序中神奇的“分身术”

【Linux/C++多进程篇(一) 】一个变两个?揭秘 C/C++ 程序中神奇的“分身术”

⭐️在这个怀疑的年代,我们依然需要信仰。 个人主页:YYYing. ⭐️Linux/C++进阶系列专栏:【从零开始的linux/c++进阶编程】 ⭐️其他专栏:【linux基础】【数据结构与算法】【从零开始的计算机网络学习】 系列上期内容:【Linux/C++文件篇(一) 】标准I/O与文件I/O基础  系列下期内容:【Linux/C++多进程篇(二) 】万字解析linux系统编程之进程间通信 (IPC) 目录 前言:        多进程理论基础 一、为什么要引入多进程 二、多进程相关概念 三、进程的内存管理 四、进程与程序的区别 五、进程的种类 六、进程PID 七、特殊的进程 八、linux中有关进程的指令 九、进程状态的切换

By Ne0inhk
【Linux】线程池(一)C++ 手写线程池:基于策略模式实现高性能日志模块

【Linux】线程池(一)C++ 手写线程池:基于策略模式实现高性能日志模块

文章目录 * 池化技术 * 线程池的日志模块 * 日志与策略模式 * 日志模块 * 两个核心问题 * 设计文件等级 * 刷新策略 * 获取日志时间 * logger类实现 * 内部类LogMessage实现 * 日志刷新流程图及源码 池化技术 池化技术可以减少很多的底层重复工作,例如创建进程、线程、申请内存空间时的系统调用和初始化工作,例如线程池,先预先创建好一些线程,当任务到来时直接将预先创建好的线程唤醒去处理任务,效率会远远高于任务到来时临时创建线程。例如内存池,但我们要用1mb空间时内存池会一次性申请20mb空间,效率会远远高于用多少空间申请多少空间(申请空间会调用系统调用)。 线程池是执行流级别的池化技术,STL中的空间配置器和内存池是内存块管理级别的池化技术。 线程池的日志模块 下⾯开始,我们结合我们之前所做的所有封装,进⾏⼀个线程池的设计。在写之前,我们要做如下准备。 * 准备线程的封装 * 准备锁和条件变量的封装 * 引⼊日志,对线程进⾏封装 日志与策略

By Ne0inhk
【C++初阶】C++入门相关知识(2):输入输出 & 缺省参数 & 函数重载

【C++初阶】C++入门相关知识(2):输入输出 & 缺省参数 & 函数重载

🎈主页传送门:良木生香 🔥个人专栏:《C语言》 《数据结构-初阶》 《程序设计》《鼠鼠的C++学习之路》 🌟人为善,福随未至,祸已远行;人为恶,祸虽未至,福已远离 上期回顾:在上一篇文章中,我们对C++进行了初步的认识,学习了C++的发展历史,第一个C++程序以及命名空间,我们知道,C++的出现就是为了改进和完善C语言的不足,使得程序更加高效,程序员编写起来更加方便快捷,那么本篇文章我们继续往下认识C++的入门相关知识 目录 一、C++的输入&输出 1.1、核心载体:头文件 1.2、核心的IO对象:cin与cout 1.2.1、std::cin 标准输入流 1.

By Ne0inhk