go beego框架问题怎么解决


这篇文章主要介绍了go beego框架问题怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇go beego框架问题怎么解决文章都会有所收获,下面我们一起来看看吧。最近在项目中遇到了一个很奇怪的问题:在整改日志规范时,为了避免影响现有的代码结构以及改动尽可能小的前提下,在调用记日志的SDK处将某一个字段值首字母改为大写, 香港云主机代码示例如下:项目中这里的a变量其实是作为参数传入,只是可能为空串。a变量不为空串时,这样写肯定没问题。但是当为空串时,即””时,就会出问题,在java中,运行的时候肯定会报一个“数组下表越界”的异常。小强将工程编译后生成二进制文件,放到服务器上跑,测试修改后的日志是否符合规范,验了一遍,没有问题,然后就将代码提交了。之后版本出来测试时发现,有个奇怪的现象:接口不返回任何东西,状态码依然是 200 OK。这让小强很纳闷儿,还好,我们的小强经验丰富,还是解决过大bug的人,然后就根据接口走了一遍代码流程,眉头一皱,就知道问题所在了。原来就是a变量有时候传进来是空字符串,导致出现了slice下标越界的panic,说干就干,小强赶紧做了空串的判断逻辑,重新验了一把,问题就解决了。原来问题是这样,项目中使用的beego版本是1.6.1版。查到了beego的错误处理流程:beego通过beego.App.Server.Handler处理所有的HTTP请求,在beego.Run()函数中,这个Handler就被设置为app.Handlers,可以参见beego1.6.1版本app.go的第95行:而app在一开始就被初始化,可以看app.go中的init()函数,其中调用了NewApp()函数:可以看出,把cr赋值给Handler,其实cr是ControllerRegister类型,ControllerRegister类型实现了http.Handler接口,具体实现可以看router.go的第600行ServeHTTP方法。该方法中(第612行)有如下语句:golang语言的错误处理机制是,当在某处调用panic(string)后,panic之后的语句将不再执行,而是通过调用关系逐级退出,在每一级调用处都通过defer处理函数检查是否panic被recover()函数捕获处理,如果没有则继续往上扔panic信息,如果已经被捕获则结束此次panic过程,由捕获panic的函数处继续往下执行。出现异常会执行recoverPanic方法,该方法中(第864行)有这样的代码段:showErr函数中会对错误进行模板渲染,而项目早在现网中投入使用,RunMode为prod,而非dev,所以recover()后不会有错误提示。当RunMode为prod时:当RunMode为prod时:dev模式好歹会返回错误信息:slice bounds out of rangeprod模式没有任何提示。下标越界这种问题看似简单,但是真正遇到了有时候也会摸不着头脑。关于“go beego框架问题怎么解决”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“go beego框架问题怎么解决”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注开发云行业资讯频道。

相关推荐: Java常见基础数据结构是什么

今天小编给大家分享一下Java常见基础数据结构是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。stack,又称堆栈,他是运算受限的线性表,其…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 07/03 22:06
下一篇 07/03 22:06

相关推荐