go语言返回错误时的处理方法

这篇文章给大家分享的是go语言返回错误时的处理方法,相信大部分人都还没学会这个技能,为了让大家学会,给大家总结了以下内容,话不多说,一起往下看吧。

为衡水等地区用户提供了全套网页设计制作服务,及衡水网站建设行业解决方案。主营业务为成都网站建设、成都网站设计、衡水网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

一、失败的原因只有一个时,不使用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… 
}

四、错误逐层传递时,层层都加日志

层层都加日志非常方便故障定位。

以上就是go语言返回错误时的处理方法,详细使用情况还需要大家自己亲自动手使用过才能领会。如果想了解更多相关内容,欢迎关注创新互联行业资讯频道!


文章题目:go语言返回错误时的处理方法
文章起源:http://scyanting.com/article/jchsdj.html