我们的项目用的iris框架, 在接口里面开启go程后如果go程 panic 了, 则整个服务都会挂掉, 能不能写一个全局的 recover来监听go程的 panic
1. 可笑的是你说的那些etcd, zookeeper本身也是负载均衡的一种软件实现而已。和loadbalance的硬件集群不同的是携带了更多的语义,你估计没玩过硬件loadbalance,不是你想的那么简单就是一个分发器的样子。<br/>
2. 是你说的recover可以清理资源什么释放数据库锁,这么快就忘记了?怎么向我要代码?我什么时候说我要写recover的代码来恢复panic了?是某人信誓旦旦说 recover如何神奇如何能让服务不挂掉,如果开心的在里面打log, 在里面各种释放资源,怎么这么快就打脸了?没有自己代码?那你说个毛线!只会搬别人的东西然后大谈recover如何如何?人云亦云!<br/>
3.程序的正常流程被意外的panic中断了居然某人认为这很优雅...好吧,你就是用异常来控制程序流程的习惯了嘛。没有try catch就必死无疑的程序员很多。因为这些人不会写更强壮的代码包括预防性的错误检查措施返回error并因此防止出现panic,而是只习惯于catch一下打一个stack一了百了。这种高人很多的,不差你一个。<br/>
4.error的层层返回被理解为堆栈乱套了,OMG,头一次听到这种奇葩言论,正常的错误返回和堆栈有什么关系,你习惯于不返回错误只用panic抛出异常,然后在defer里面用recover一个一个的筛选判断这次的panic到底是业务异常呢还是系统异常呢?这不是一个大傻瓜的做法么。。。请告诉我你的学校和老师,他们都会出名的。<br/>
5.自己打自己的脸很好玩么?error这么好的设计居然被你说成全世界嘲笑,那么全世界反而不嘲笑panic?你看go程序中error用的多还是panic用的多?你比go设计者还牛逼?那为啥还保留error这种全世界都嘲笑的设计?<br/>
6.panic不管谁定义的,它的作用就是要退出程序,你喜欢用这个配合recover写谁也看不懂的优雅代码那也随便你,不要强迫别人也接受你的奇葩思路和方式。
#35
更多评论
<a href="/user/polaris" title="@polaris">@polaris</a> 如果不考虑go程的话可以监听, 但是go程里面不知道咋监听...
#2