Golang Go语言中大家项目中用的是什么 web 框架以及怎么处理 handler 中的 error?

发布于 1周前 作者 htzhanglong 来自 Go语言

Golang Go语言中大家项目中用的是什么 web 框架以及怎么处理 handler 中的 error?

根据上面的统计,gin 貌似是最多的,不知道实际情况如何。

另一个问题是怎么在 handler 中处理 err,知乎用的是 panic/recover 的方式,这样肯定是不符合 go 的惯用法,但是思路是对的,在统一的地方处理 err,网上搜索了下,正确的思路应该是自定义 handler type

type appHandler func( http.ResponseWriter, *http.Request) *appError

这里想问下,大家是怎么处理 handler 中 error 的。


更多关于Golang Go语言中大家项目中用的是什么 web 框架以及怎么处理 handler 中的 error?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

18 回复

目前线上用的是 goframe,里面有个 gerror.wrap 之类的,我是这样使用的

<br>db 模型(业务最底层) <br> =&gt; action 操作类 return gerror.Wrap(err, "自己看的 action 错误提示信息") <br> =&gt; service 服务类 return gerror.Wrap( actionErr, "自己看的 service 错误提示信息")<br> =&gt; controller 控制器 SmartResponseError( serviceErr, "返回给用户的错误提示信息")<br><br>SmartResponseError(r *ghttp.Request, data ...interface{}){<br> ....<br> switch v := data[0].(type){<br> case *gerror.Error:<br> // 将 error 写入日志<br> // 打印最后一个错误信息<br> case error:<br> // 普通错误,不需要写入日志,直接打印错误信息<br> }<br>}<br>

大概就是这样子,通常使用第三方库(如 xorm 等)错误的信息都会 wrap 包一下,方便查看,普通的错误像参数不符合要求的,就直接返回错误信息就可以了

更多关于Golang Go语言中大家项目中用的是什么 web 框架以及怎么处理 handler 中的 error?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


对。像楼上说的。需要 wrapper 一下。

我现在是 wapper 和 log.error 日志结合的。需要收集处理下。

发到 sentry 上

+1 我用的用 pkg/errors 这个包

实际上和 xerror 差不多,效果保留异常追溯。

推荐 goframe,理由你要 go 的框架。

https://www.jetbrains.com/lp/devecosystem-2019/go/

这里有个统计的





wrap 的方式我目前也在用,关键在于只支持传递 string,没法传 http code 信息

#1 看了下 goframe 的处理方式,也是用 panic/recover 来做的呀,

<br>// Exit exits executing of current HTTP handler.<br>func (r *Request) Exit() {<br> panic(gEXCEPTION_EXIT)<br>}<br>

嗯,其实思路都差不多的。自创解决方案我是做不到的,我一般都是翻别人代码,参考下别人怎么写

我返回 code 是用的这种方式
自定义一个结构体 实现了 error 接口 最上层判断一下

https://gitee.com/liujiacai/codes/497gr52ehk0ajywxdfbp655

我这里写了个简单的 demo,你们看看这样方式是不是更优雅一些?有类似这种做法的框架吗?

goframe 相比 gin 性能怎样?

gin 功能少呀,给 c 程序员够用,给正常 web 开发者不够,

开箱即用不香吗? linus 都说我给你们做好了技术,你们只要考虑 profit。

gin 应该是核心功能少,主要依赖各种周边的中间件…

你地址,我打开来是 404

gitee 有 bug 呀,明明我已经设置 public 了,移步 github gist 吧

<script src=“https://gist.github.com/jiacai2050/b7445647006237f5fbb27cc2494ad3b0.js”></script>

在Golang的Go语言项目中,常用的Web框架包括Gin、Echo、Beego、Revel和Buffalo等。这些框架各具特色,如Gin轻量级且模块化,Echo性能出色,Beego功能丰富,Revel和Buffalo则更适合构建企业级应用。

对于handler中的error处理,Go语言采取显式错误处理机制。开发人员需要明确地检查和处理错误,通常通过if err != nil语句来判断是否发生错误,并据此采取相应措施,如记录日志、返回错误信息给客户端或执行其他错误恢复操作。

在处理error时,还可以利用Go的errors包提供的函数来简化操作。例如,使用errors.New()创建新的错误,errors.Is()检查错误类型,errors.As()转换错误类型,以及errors.Unwrap()获取底层错误。这些功能有助于开发人员更准确地理解和处理错误。

此外,为了提供更丰富的错误信息,可以使用如errors.Wrap()这样的函数来包装错误消息,添加额外的上下文信息,便于日志记录或调试。总之,在Go语言的Web项目中,选择合适的框架和妥善的错误处理机制对于构建健壮可靠的Web应用至关重要。

回到顶部