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语言返回错误时的处理方法,详细使用情况还需要大家自己亲自动手使用过才能领会。如果想了解更多相关内容,欢迎关注北单博客行业资讯频道!

原创文章,作者:RIXFV,如若转载,请注明出处:https://www.beidanyezhu.com/a/26337.html

(0)
RIXFV的头像RIXFV
上一篇 2025-01-02
下一篇 2025-01-02

相关推荐

  • 3个方法(句子表达效果)

    任何时候,我都觉得掌握演讲这种技能是非常重要的。 不管是跟别人沟通还是汇报工作,多多少少都会用到一些演讲的技巧。 很多时候在职场上,会说话的人比不会说话的人会混得更好。同样完成一项…

  • go语言如何从结构体中获取某个字段的值

    这篇文章主要介绍go语言如何从结构体中获取某个字段的值,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! Go 语言提供了 user.Name 语法,来从 us…

  • go语言有哪些优点

    go语言的优点:1、可直接编译成机器码,不依赖其他库;2、静态类型语言,但是有动态语言的感觉,写起来的效率很高;3、语言层面支持并发;4、内置runtime,支持垃圾回收;5、简单…

  • go语言中make和new有哪些区别

    区别:在go语言中,make和new都是内存的分配(堆上),但是make只用于slice、map以及channel的初始化(非零值);而new用于类型的内存分配,并且内存置为零。m…

  • go语言的开发工具有哪些

    go语言开发工具:Gogland、Eclipse、LiteIDE、KomodoIDE、Atom、Brackets、Visual Studio Code、Cloud9、CodeEnv…

  • go语言和python有哪些区别

    区别:1、Python是一种基于面向对象编程的多范式,命令式和函数式编程语言;Go是一种基于并发编程范式的过程编程语言。2、Python是动态类型语言,Go是静态类型语言。3、Py…

  • go语言是不是开源的

    go是开源语言。Go也称为Golang,是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的开源编程语言,它能让构造简单、可靠且高效的软件变得容易 Go也称为G…

  • go语言和Java语言有哪些区别

    区别:1、Go不允许函数重载,必须具有方法和函数的唯一名称;java允许函数重载。2、Java默认允许多态,Go没有。3、Go代码可以自动扩展到多个核心;而Java并不总是具有足够…

  • go语言如何实现string转float

    go语言实现string转float的方法:首先创建一个go示例文件;然后定义一个字符串;最后通过“v1, err:=strconv.ParseFloat(v, 32)”方式将st…

  • Go语言有哪些优势

    Go语言有优势:1、学习曲线容易;2、开发效率和运行效率高;3、Go语言可以说是开发效率和运行效率二者的完美融合,天生的并发编程支持;4、Go语言拥有强大的编译检查、严格的编码规范…

    2025-01-05

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

分享本页
返回顶部