返回顶部
首页 > 资讯 > 前端开发 > 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://lsjlt.com/news/74112.html(转载时请注明来源链接)

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

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

  • 微信公众号

  • 商务合作