Golang Go语言中大家项目中用的是什么 web 框架以及怎么处理 handler 中的 error?
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
目前线上用的是 goframe,里面有个 gerror.wrap 之类的,我是这样使用的<br>db 模型(业务最底层) <br> => action 操作类 return gerror.Wrap(err, "自己看的 action 错误提示信息") <br> => service 服务类 return gerror.Wrap( actionErr, "自己看的 service 错误提示信息")<br> => 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应用至关重要。