golang返回错误时如何正确处理
Go  /  管理员 发布于 7年前   178
正确处理方法:
一、失败的原因只有一个时,不使用error
例如:
func (self *AgentContext) CheckHostType(host_type string) error { switch host_type { case "virtual_machine":return nil case "bare_metal": return nil } return errors.New("CheckHostType ERROR:" + host_type)}
我们可以看出,该函数失败的原因只有一个,所以返回值的类型应该为bool,而不是error,重构一下代码:
func (self *AgentContext) IsValidHostType(hostType string) bool { return hostType == "virtual_machine" || hostType == "bare_metal"}
说明:大多数情况,导致失败的原因不止一种,尤其是对I/O操作而言,用户需要了解更多的错误信息,这时的返回值类型不再是简单的bool,而是error。
二、没有失败时,不使用error
error在Golang中是如此的流行,以至于很多人设计函数时不管三七二十一都使用error,即使没有一个失败原因。
我们看一下示例代码:
func (self *CniParam) setTenantId() error { self.TenantId = self.PodNs return nil}
对于上面的函数设计,就会有下面的调用代码:
err := self.setTenantId()if err != nil { // log // free resource return errors.New(...)}
根据我们的正确姿势,重构一下代码:
func (self *CniParam) setTenantId() { self.TenantId = self.PodNs}
于是调用代码变为:
self.setTenantId()
三、error应放在返回值类型列表的最后
对于返回值类型error,用来传递错误信息,在Golang中通常放在最后一个。
resp, err := http.Get(url)if err != nil { return nill, err}
bool作为返回值类型时也一样。
value, ok := cache.Lookup(key) if !ok { // ...cache[key] does not exist… }
四、错误逐层传递时,层层都加日志
层层都加日志非常方便故障定位。
相关文章教程推荐:golang教程
以上就是golang返回错误时如何正确处理的详细内容,更多请关注其它相关文章!
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号