做国外网站的零售,公司网上注册流程,德州公司做网站,书城网站开发的参考文献最近在GitHub上发起了一个关于Beego框架的小插件的开源仓库#xff0c;这一举动虽然看似微小#xff0c;但其中的快乐和意义却是无法用言语表达的。
Beego是一个开源的Go语言Web框架#xff0c;它采用了MVC架构模式#xff0c;并集成了很多常用的功能和中间件。小插件是指…最近在GitHub上发起了一个关于Beego框架的小插件的开源仓库这一举动虽然看似微小但其中的快乐和意义却是无法用言语表达的。
Beego是一个开源的Go语言Web框架它采用了MVC架构模式并集成了很多常用的功能和中间件。小插件是指与Beego框架配套使用的、可扩展的、独立的软件模块或组件。通过开发小插件可以扩展Beego框架的功能提高开发效率和代码可维护性。
Beego-Requestid是一种中间件Middleware用于在处理HTTP请求时为每个请求生成一个唯一的ID并将其附加到请求上下文中。这样您可以在应用程序的其他地方方便地访问这个唯一的请求ID从而更好地跟踪和调试应用程序。
使用RequestId中间件可以帮助您解决以下问题
跟踪请求通过在每个请求中添加唯一的ID您可以轻松地在应用程序中跟踪请求的来源和路径。这对于调试和性能优化非常有用。日志记录您可以使用请求ID将日志记录与特定请求关联起来。这样当您在日志中查找特定请求的信息时可以更方便地定位相关的日志条目。错误处理如果应用程序中出现错误请求ID可以帮助您识别是哪个请求引发了错误。这对于故障排查和问题报告非常有帮助。
代码
话不多说直接看源码
package beego_requestidimport (github.com/beego/beegogithub.com/beego/beego/contextgithub.com/google/uuid
)const DefaultHeaderReqIdKey X-Request-Idtype 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 (logtimegithub.com/spf13/castgithub.com/beego/beegogithub.com/beego/beego/contextbeego_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