程序员的快乐如此简单

最近在GitHub上发起了一个关于Beego框架的小插件的开源仓库,这一举动虽然看似微小,但其中的快乐和意义却是无法用言语表达的。

Beego是一个开源的Go语言Web框架,它采用了MVC架构模式,并集成了很多常用的功能和中间件。小插件是指与Beego框架配套使用的、可扩展的、独立的软件模块或组件。通过开发小插件,可以扩展Beego框架的功能,提高开发效率和代码可维护性。

Beego-Requestid是一种中间件(Middleware),用于在处理HTTP请求时,为每个请求生成一个唯一的ID,并将其附加到请求上下文中。这样,您可以在应用程序的其他地方方便地访问这个唯一的请求ID,从而更好地跟踪和调试应用程序。

使用RequestId中间件可以帮助您解决以下问题:

  1. 跟踪请求:通过在每个请求中添加唯一的ID,您可以轻松地在应用程序中跟踪请求的来源和路径。这对于调试和性能优化非常有用。
  2. 日志记录:您可以使用请求ID将日志记录与特定请求关联起来。这样,当您在日志中查找特定请求的信息时,可以更方便地定位相关的日志条目。
  3. 错误处理:如果应用程序中出现错误,请求ID可以帮助您识别是哪个请求引发了错误。这对于故障排查和问题报告非常有帮助。
代码

话不多说直接看源码:

package beego_requestidimport ("github.com/beego/beego""github.com/beego/beego/context""github.com/google/uuid"
)const DefaultHeaderReqIdKey = "X-Request-Id"type Option func(config *Config)type GenRequestIdFunc func() stringtype Config struct {genRequestIdFunc               GenRequestIdFuncheaderReqIdKey, customReqIdKey string
}func NewFilter(opts ...Option) beego.FilterFunc {cnf := &Config{genRequestIdFunc: DefaultGenRequestIdFunc,headerReqIdKey:   DefaultHeaderReqIdKey,}for _, opt := range opts {opt(cnf)}return func(c *context.Context) {reqId := c.Request.Header.Get(cnf.headerReqIdKey)if reqId == "" {reqId = cnf.genRequestIdFunc()c.Request.Header.Add(cnf.headerReqIdKey, reqId)}if cnf.customReqIdKey != "" {c.Input.SetData(cnf.customReqIdKey, reqId)}}
}func WithGenRequestIdFunc(genFunc GenRequestIdFunc) Option {return func(config *Config) {config.genRequestIdFunc = genFunc}
}func WithHeaderReqIdKey(key string) Option {return func(config *Config) {config.headerReqIdKey = key}
}func WithCustomReqIdKey(key string) Option {return func(config *Config) {config.customReqIdKey = key}
}func DefaultGenRequestIdFunc() string {return uuid.NewString()
}

使用示例:

package mainimport ("log""time""github.com/spf13/cast""github.com/beego/beego""github.com/beego/beego/context"beego_requestid "github.com/ibarryyan/beego-requestid"
)func example1() {beego.InsertFilter("/*", beego.BeforeRouter, beego_requestid.NewFilter())beego.Get("/hello", func(c *context.Context) {reqId := c.Request.Header.Get("X-Request-Id")log.Printf("reqestid = %s", reqId)_, _ = c.ResponseWriter.Write([]byte("hello..."))return})beego.Run(":9900")
}func example2() {beego.InsertFilter("/*", beego.BeforeRouter, beego_requestid.NewFilter(beego_requestid.WithGenRequestIdFunc(func() string {return cast.ToString(time.Now().Unix())}),beego_requestid.WithHeaderReqIdKey("my_header_reqid"),beego_requestid.WithCustomReqIdKey("my_reqid"),))beego.Get("/hello", func(c *context.Context) {reqId := c.Request.Header.Get("my_header_reqid")log.Printf("reqestid = %s", reqId)cReqId := c.Input.GetData("my_reqid")log.Printf("my reqestid = %s", cReqId)_, _ = c.ResponseWriter.Write([]byte("hello..."))return})beego.Run(":9900")
}

此外,前端请求时需要带上header key要与后端的一致

获得快乐

发完代码后我就直接去Beego的GitHub仓库下提了一个issue,来分享的研究的中间件,地址:https://github.com/beego/beego/issues/5419,后来没想到竟然收到了回复,哈哈哈

在这里插入图片描述

然后我立马就去新的issue分享了我的插件

https://github.com/beego/beego/issues/5421

再后来,我就有两个star了~

在这里插入图片描述

仓库地址

https://github.com/ibarryyan/beego-requestid

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【RUST】HashMap、vector和String

HashMap 新建一个哈希hash use std::colection::HashMap;let mut scores HashMap::new();scores.insert(String::from("Blue"), 10); score.Vector 创建vector let arr vec![2, 3, 5]; let arr: [i32; 3] [2, 3, 5]; // 创建定长数组访问vec中的元素 # 报错…

软件工程 第一次随堂练习

以下答案是经过人工智能生成,个人理解得出的答案,若有不同见解,请在评论区留言或私信 说明下列需求分别属于下面的哪种类型,为什么? A.业务需求 B.用户需求 C.系统级(功能)需求 D.性能需求 E.质…

AIGC绘本——海马搬家来喽

随着ChatGPT的快速发展,人工智能领域也发生了翻天覆地的变化。今天,我们迎合科技潮流,利用AIGC的强大能力,可以创作很多精彩的作品,比如这样一本名为《海马搬家》的绘本(注:此绘本根据同名儿童故…

线性绘制在NSDT 3D场布中的应用

什么是线性摆放? 线性摆放是指将一系列对象按照直线或者曲线进行排列,形成一条线或者弧线状的布局方式。在3D场布中,线性摆放可以应用于多个领域和场景,如展览设计、景观规划、商业空间布置等。 线性绘制在3D场布中的应用 展览设…

OpenCV自学笔记十三:图像梯度

目录 1、Sobel算子及函数使用 2、Scharr算子及函数使用 3、Lapiacian算子及函数使用 1、Sobel算子及函数使用 Sobel算子是一种常用于图像边缘检测的算法,它利用了图像中像素灰度值的变化来寻找边缘。在OpenCV中,可以使用函数cv2.Sobel()来实现Sobel算…

什么是CORS(跨源资源共享)?如何解决前端中的CORS问题?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ CORS(跨源资源共享)⭐ 解决前端中的CORS问题的方法⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为…

HCQ1-1300-D故障笔记

常用查错网址: SMC_ERROR (ENUM) 删除 Web

9.19号作业

2> 完成文本编辑器的保存工作 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QFontDialog> #include <QFont> #include <QMessageBox> #include <QDebug> #include <QColorDialog> #include <QColor&g…

AJAX的奇妙之旅(1)基础知识

一、简介 AJAX&#xff08;Asynchronous JavaScript and XML&#xff09;是一种使用现有标准的新方法。它是一种用于创建快速动态网页的技术。AJAX 最大的优点是在不重新加载整个页面的情况下&#xff0c;可以与服务器交换数据并更新部分网页内容。AJAX 不需要任何浏览器插件&a…

golang 自动生成文件头

安装koroFileHeader控件 打开首选项&#xff0c;进入设置&#xff0c;配置文件头信息"fileheader.customMade": {"Author": "lmy","Date": "Do not edit", // 文件创建时间(不变)// 文件最后编辑者"LastEditors"…

R语言贝叶斯非参数模型:密度估计、非参数化随机效应META分析心肌梗死数据...

全文链接&#xff1a;http://tecdat.cn/?p23785 最近&#xff0c;我们使用贝叶斯非参数&#xff08;BNP&#xff09;混合模型进行马尔科夫链蒙特卡洛&#xff08;MCMC&#xff09;推断&#xff08;点击文末“阅读原文”获取完整代码数据&#xff09;。 概述 相关视频 在这篇文…

世界前沿技术发展报告2023《世界信息技术发展报告》(一)世界信息技术及产业发展重要动向

&#xff08;一&#xff09;世界信息技术及产业发展重要动向 1. 概述2. 半导体技术水平持续进步&#xff0c;行业内部开始新一轮调整2.1 全球主要经济体加强半导体技术能力建设&#xff0c;推动厂商扩产2.2 先进制程技术持续发展&#xff0c;先进封装技术崭露头角2.3 消费电子半…

【算法练习Day1】二分查找移除元素

​ ​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;练题 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录 二分查找解决方法一&…

ChatGPT WPS AI 一键核对两表数据差异

业务需求,找出两个表中不相同的内容。如下图: 像这样的表格中,要找出不同的值,手动核对效率不高。 现在我们有了ChatGPT,可以由人工智能来完成这一操作,高效,快速,准确定位差异值。 指令:请找出A1:G14 单元格区域和I1:O14单元格区域的不相同部分,将两部数据区域不相…

golang后端开发非常成熟好用的总结的几个高频使用库快速实现开发

golang后端开发非常成熟好用的总结的几个高频使用库快速实现开发。 随着时间的推移&#xff0c;语言爱好者已经构建和共享了许多 Go 框架和库。这些包执行不同的功能&#xff0c;从开发微服务到制作 discord 机器人&#xff0c;一直到构建 Web 应用程序&#xff01;在本文中&a…

记一次hyperf框架封装swoole自定义进程

背景 公司准备引入swoole和rabbitmq来处理公司业务。因此&#xff0c;我引入hyperf框架&#xff0c;想用swoole的多进程来实现。 自定义启动服务封装 <?php /*** 进程启动服务【manager】*/ declare(strict_types1);namespace App\Command;use Swoole; use Swoole\Proce…

C语言每日一题(10):无人生还

文章主题&#xff1a;无人生还&#x1f525;所属专栏&#xff1a;C语言每日一题&#x1f4d7;作者简介&#xff1a;每天不定时更新C语言的小白一枚&#xff0c;记录分享自己每天的所思所想&#x1f604;&#x1f3b6;个人主页&#xff1a;[₽]的个人主页&#x1f3c4;&#x1f…

Weblogic反序列化漏洞(CVE-2018-2628/CVE-2023-21839复现)

内容目录 Weblogic反序列化漏洞(CVE-2018-2628/CVE-2023-21839)weblogic中间件CVE-2018-2628漏洞描述影响版本漏洞复现修复方案 CVE-2023-21839漏洞描述影响版本漏洞复现修复方案 Weblogic反序列化漏洞(CVE-2018-2628/CVE-2023-21839) weblogic中间件 WebLogic是美国Oracle公司…

在给应用ASO优化时要注意些什么

应用名称是搜索引擎优化和转化率优化非常重要的元素。用户在搜索结果页面中看到我们的应用程序&#xff0c;这是他们决定是否想要更多地了解我们应用的地方。当用户已经在查看产品页面时&#xff0c;应用程序名称也会影响转化率&#xff0c;如果列表元数据有吸引力&#xff0c;…

代码随想录二刷day36

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、力扣435. 无重叠区间二、力扣763. 划分字母区间三、力扣56. 合并区间 前言 一、力扣435. 无重叠区间 class Solution {public int eraseOverlapIntervals(…