广告
返回顶部
首页 > 资讯 > 前端开发 > node.js >Go语言中怎么有效处理错误
  • 484
分享到

Go语言中怎么有效处理错误

2024-04-02 19:04:59 484人浏览 薄情痞子
摘要

今天就跟大家聊聊有关Go语言中怎么有效处理错误,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、简介Go语言受到诟病最多的一项就是其错误处理机制。如

今天就跟大家聊聊有关Go语言中怎么有效处理错误,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

一、简介

Go语言受到诟病最多的一项就是其错误处理机制。如果显式地检查和处理每个error,这恐怕的确会让人望而却步。你可以试试这里列出的几个方法,以避免你走入错误处理方法的误区当中去。

二、在缩进区处理错误

当使用Go语言编写代码时,***下面这样的错误处理方法:

f, err := os.Open(path) if err != nil {     // handle error } // do stuff  而不是下面这样的:  f, err := os.Open(path) if err == nil {     // do stuff } // handle error

按照上面的方法处理错误,处理正常情况的代码读起来就显得通篇连贯了。

三、定义你自己的errors

做好如何正确进行错误处理的***步就是要了解error是什么。如果你设计实现的包会因某种原因发生某种错误,你的包用户将会对错误的原因很感兴趣。为了满足用户的需求,你需要实现error接口,简单做起来就像这样:

type Error string func (e Error) Error() string { return string(e) }

现在,你的包用户通过执行一个type assertion就可以知道是否是你的包导致了这个错误:

result, err := yourpackage.Foo() if ype, ok := err.(yourpackage.Error); ok {     // use ype to handle error }

通过这个方法,你还可以向你的包用户暴露更多地结构化错误信息:

type ParseError struct {     File  *File     Error string }  func (oe *ParseError) Error() string {//译注:原文中这里是OpenError     // fORMat error string here }  func ParseFiles(files []*File) error {     for _, f := range files {         err := f.parse()         if err != nil {             return &ParseError{ //译注:原文中这里是OpenError                 File:  f,                 Error: err.Error(),             }         }     } }

通过这种方法,你的用户就可以明确地知道到底哪个文件出现解析错误了。(译注:从这里看到的go语言error设计之内涵,让我想起了Rob Pike大神的一篇Blog:"少即是级数级的多")

不过包装error时要小心,当你将一个error包装起来后,你可能会丢失一些信息:

var c net.Conn f, err := DownloadFile(c, path) switch e := err.(type) { default:     // this will get executed if err == nil case net.Error:     // close connection, not valid anymore     c.Close()     return e case error:     // if err is non-nil     return err } // do other things.

如果你包装了net.Error,上面这段代码将无法知道是由于网络问题导致的失败,会继续使用这条无效的链接。

有一条经验规则:如果你的包中使用了一个外部interface,那么不要对这个接口中方法返回的任何错误,使用你的包的用户可能更关心这些错误,而不是你包装后的错误。

四、将错误作为状态

有时,当遇到一个错误时,你可能会停下来等等。这或是因为你将延迟报告错误,又或是因为你知道如果这次报告后,后续你会再报告同样的错误。

***种情况的一个例子就是bufio包。当一个bufio.Reader遇到一个错误时,它将停下来保持这个状态,直到buffer已经被清空。只有在那时它才会报告错误。

第二种情况的一个例子是go/loader。当你通过某些参数调用它导致错误时,它会停下来保持这个状态,因为它知道你很可能会使用同样地参数再次调用它。

五、使用函数以避免重复代码

如果你有两段重复的错误处理代码,你可以将它们放到一个函数中去:

func handleError(c net.Conn, err error) {     // repeated error handling }  func DoStuff(c net.Conn) error {     f, err := downloadFile(c, path)     if err != nil {         handleError(c, err)         return err     }      f, err := doOtherThing(c)     if err != nil {         handleError(c, err)         return err     } }

优化后的实现方法如下:

func handleError(c net.Conn, err error) {     if err == nil {         return     }     // repeated error handling }  func DoStuff(c net.Conn) error {     defer func() { handleError(c, err) }()     f, err := downloadFile(c, path)     if err != nil {         return err     }      f, err := doOtherThing(c)     if err != nil {         return err     } }

看完上述内容,你们对Go语言中怎么有效处理错误有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网node.js频道,感谢大家的支持。

--结束END--

本文标题: Go语言中怎么有效处理错误

本文链接: https://www.lsjlt.com/news/74112.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Go语言中怎么有效处理错误
    今天就跟大家聊聊有关Go语言中怎么有效处理错误,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、简介Go语言受到诟病最多的一项就是其错误处理机制。如...
    99+
    2022-10-19
  • Go语言的错误处理方式
    这篇文章主要介绍“Go语言的错误处理方式”,在日常操作中,相信很多人在Go语言的错误处理方式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Go语言的错误处理方式”的疑惑有所帮助!接下来,请跟着小编一起来学习吧...
    99+
    2023-06-15
  • Go语言的错误处理方法有哪些
    这篇文章主要介绍了Go语言的错误处理方法有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Go语言的错误处理方法有哪些文章都会有所收获,下面我们一起来看看吧。与其他语言的快速比较在 Go 中,所有的错误都是值...
    99+
    2023-06-17
  • go语言错误处理的方法有哪些
    Go语言中的错误处理方法有以下几种:1. 返回错误值:函数可以返回一个额外的错误值,通常是一个error类型的值,用于表示函数执行过...
    99+
    2023-08-15
    go语言
  • Go语言中路由的错误处理技巧
    Go语言中路由的错误处理技巧引言:在使用Go语言开发Web应用程序时,路由是一个非常重要的组件。路由的作用是根据请求的URL路径将请求映射到相应的处理程序。然而,在处理请求时,很容易出现错误。本文将介绍一些在Go语言中处理路由错误的技巧,并...
    99+
    2023-12-18
    Go语言 路由 错误处理
  • go语言规范RESTful API业务错误处理
    目录错误码为什么需要业务错误码错误码功能错误码设计错误码调研业务错误码错误格式错误码实现错误包错误包功能错误包设计错误码及错误包的使用使用示例使用建议使用尽量少的 HTTP 状态码使...
    99+
    2023-03-08
    go RESTful API错误处理 go RESTful API
  • 详解Go语言的错误处理和资源管理
    目录一、defer二、错误处理三、统一错误处理的逻辑四、panic五、recover六、error vs panic七、错误处理综合示例一、defer 1. defer保证在函数结束...
    99+
    2022-11-12
  • Go语言中实现完美错误处理实践分享
    目录1. 错误的基本概念2. 错误类型3. 自定义错误类型4. 错误处理5. errors.Is 和 errors.As6. panic 和 recover6.1 panic 函数6...
    99+
    2023-05-18
    Go语言错误处理分享 Go语言错误处理 Go 错误处理
  • golang 语言中错误处理机制
    与其他主流语言如 Javascript、Java 和 Python 相比,Golang 的错误处理方式可能和这些你熟悉的语言有所不同。所以才有了这个想法根大家聊一聊 golang 的...
    99+
    2022-11-12
  • Go语言错误处理异常捕获+异常抛出
    目录一、error变量可以做什么1.定义一个error变量2.错误的处理3.做函数返回值4.做函数参数二、模拟异常的捕获与抛出1.defer简介2.使用recover模拟异常的捕获3...
    99+
    2022-11-13
  • 如何在GO语言中高效地处理自然语言?
    自然语言处理(Natural Language Processing,简称NLP)是人工智能领域中的一个重要分支。在人工智能的应用场景中,NLP 能够帮助计算机理解和处理人类自然语言,从而实现自然语言的交互和分析。GO语言,作为一种高效、简...
    99+
    2023-06-05
    存储 数据类型 自然语言处理
  • 怎么解决Go语言的read读取错误
    这篇文章主要讲解了“怎么解决Go语言的read读取错误”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么解决Go语言的read读取错误”吧!情景描述代码中需要实现一个客户端与服务器的数据重传...
    99+
    2023-06-16
  • 深入理解Go语言文档中的log.Panic函数实现错误处理
    Go语言中的log.Panic函数是一种错误处理机制,用于指示程序发生了不可恢复的错误。当Panic函数被调用时,程序会打印错误信息并停止运行。在这篇文章中,我们将深入理解Go语言文档中的log.Panic函数,并提供具体的代码示例来演示其...
    99+
    2023-11-03
    Go语言 错误处理 logPanic
  • GO语言和自然语言处理有什么关系?
    随着人工智能技术的不断发展和应用,自然语言处理(NLP)成为热门领域之一。而GO语言作为一种新兴的编程语言,也逐渐受到了广泛关注。那么,GO语言和自然语言处理有什么关系呢? GO语言简介 GO语言是由Google公司开发的一种编程语言,于...
    99+
    2023-07-29
    numpy 自然语言处理 ide
  • Go语言中如何解决并发请求的错误处理问题?
    Go语言中如何解决并发请求的错误处理问题?在开发并发应用时,我们时常需要发送多个并发请求以提高程序的并发性能。然而,当其中一个请求发生错误时,如何有效地捕获和处理这些错误变得非常重要。Go语言提供了一些技术和模式来解决并发请求的错误处理问题...
    99+
    2023-10-22
    错误处理 关键词:Go语言 并发请求
  • Go语言中如何处理二维码中的错误和异常情况?
    随着智能手机的普及,二维码已经成为了一种非常常见的信息识别方式。而在二维码的生成和识别过程中,难免会出现一些错误和异常情况。本文将介绍在Go语言中如何处理这些错误和异常情况。 一、二维码生成 Go语言中使用第三方库github.com/s...
    99+
    2023-08-15
    二维码 unix 索引
  • Go语言中如何高效地处理数组?
    数组是编程中最基本的数据结构之一。在Go语言中,数组是一个固定长度的数据结构,它可以容纳一组相同类型的元素。但是,如果我们不知道如何高效地处理数组,它可能会成为我们程序中的瓶颈。在本文中,我们将探讨如何在Go语言中高效地处理数组。 声明...
    99+
    2023-09-12
    数组 api 实时
  • Go语言中怎么对栈进行处理
    本篇文章为大家展示了Go语言中怎么对栈进行处理,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、线程栈(thread stacks)介绍在我们研究Go的栈处理方式之...
    99+
    2022-10-19
  • go语言规范RESTful API业务错误处理的方法是什么
    这篇“go语言规范RESTful API业务错误处理的方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“go...
    99+
    2023-07-05
  • go语言中常见的并发编程错误有哪些
    这篇“go语言中常见的并发编程错误有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“go语言中常见的并发编程错误有哪些”文...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作