广告
返回顶部
首页 > 资讯 > 精选 >Go错误处理机制实例分析
  • 435
分享到

Go错误处理机制实例分析

2023-07-02 17:07:14 435人浏览 独家记忆
摘要

这篇文章主要讲解了“Go错误处理机制实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Go错误处理机制实例分析”吧!Go 错误处理机制Go 内置 errorsGo 语言中的 e

这篇文章主要讲解了“Go错误处理机制实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Go错误处理机制实例分析”吧!

Go 错误处理机制

Go 内置 errors

Go 语言中的 error 就是普通的一个接口,表示值

// Http://golang.org/pkg/builtin/#error// error 接口的定义type error interface {    Error() string}// http://golang.org/pkg/errors/error.go// errors 构建 error 对象type errorString struct {    s string}func (e *errorString) Error() string {    return e.s}

基础库中有大量自定义的 error,如 Error: EOF,而 errors.New() 返回的是内部 errorString 对象的指针。

Error 与 Exception

不同于 Java、c++ 等语言,Go 处理异常的逻辑是不引入 exception,而是采取多参数返回,因此可以在函数中带入 error interface 对象来交给调用者来进行处理。

func handle() (int, error) {    return 1, nil}func main() {    i, err := handle()    if err != nil {        return    }    // 其他处理逻辑}

需要注意的是,Go 中有 panic 的机制,可以和 recovery 搭配实现类似于 try...exception... 的效果,但是 Go 中的 panic 并不等同于 exception,exception 一般是交由调用者来进行处理,而 Go panic 则是针对真正异常的情况(如索引越界、栈溢出、不可恢复的环境问题等),意味着代码不能继续运行,而不能假设调用者会来解决 panic。

Go 的多返回值来支持调用者进行错误处理的方式给予了开发者很大的灵活性,有如下优势

  • 简单

  • Plan for failure, not success

  • 没有隐藏的控制流

  • 完全交给开发者来控制 error

  • error 是值,因此有很大的灵活性进行处理

Go 错误处理最佳实践

panic

panic 只用于真正异常的情况,如

  • 在程序启动的时候,如果有强依赖的服务出现故障时 panic 退出

  • 在程序启动的时候,如果发现有配置明显不符合要求, 可以 panic 退出(防御编程

  • 在程序入口处,例如 gin 中间件需要使用 recovery 预防 panic 程序退出

因为 panic 会导致程序直接退出,而如果使用 recovery 进行处理的话性能不好且不可控。因此,其他情况下只要不是不可恢复的程序错误,都不应该直接 panic 应该返回 error,从而交给开发者。

error

一般我们在开发中会使用 GitHub.com/pkg/errors 处理应用错误,但需要注意的是,在公共库当中,我们一般不使用。

在通过多返回值来判断错误时,error 应该是函数的最后一个返回值,而当 error 不是 nil 时,其他返回值均应该为不可用状态,不应该对它们进行额外处理,错误处理的时候也应该先判断错误,当 if err != nil 时及时返回错误,从而避免过多的代码嵌套。

// 错误示例func f() error {    ans, err := someFunc()    if err == nil {        // 其他逻辑    }    return err}// 正确示例func f() error {    ans, err := someFunc()    if err != nil {        return err    }    // 其他逻辑    return nil}

当程序出现错误时,一般使用 errors.New 或 errors.Errorf 返回错误值

func someFunc() error {    res := anotherFunc()    if res != true {        errors.Errorf("结果错误,已尝试 %d 次", count)    }    // 其他逻辑    return nil}

而如果是调用其他函数出现问题,则应该直接返回,如果需要携带额外信息,则使用 errors.WithMessage

func someFunc() error {    res, err := anotherFunc()    if err != nil {        return errors.WithMessage(err, "other infORMation")    }}

如果是调用其他库(标准库、企业公共库、开源第三方库等)获取到错误时,请使用 errors.Wrap 添加堆栈信息。只需要在错误第一次出现时使用,且在基础库和被大量引用的第三方库编写时一般不使用,避免堆栈信息重复。

func f() error {    err := JSON.Unmashal(&a, data)    if err != nil {        return errors.Wrap(err, "other information")    }    // 其他逻辑    return nil}

当需要对错误进行判断时,需要采用 errors.Is 进行比较

func f() error {    err := A()    if errors.Is(err, io.EOF){        return nil    }    // 其他逻辑    return nil}

而对错误类型进行判断时则使用 errors.As 进行赋值

func f() error {    err := A()    var errA errorA    if errors.As(err, &errA){        // ...    }    // 其他逻辑    return nil}

对于业务中的错误(如输入错误等),最好在统一的一个地方建立自己的错误字典,其中应该包含错误代码并且可以在日志中作为独立字段打印,也需要有清晰的文档。

我们常常用日志来辅助我们进行错误处理,不需要进行返回、被忽略的错误必须输出日志,但禁止每个出错的地方都打日志。而如果同一个地方不停地报错,最好是打印一次错误详情并打印出现次数。

感谢各位的阅读,以上就是“Go错误处理机制实例分析”的内容了,经过本文的学习后,相信大家对Go错误处理机制实例分析这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: Go错误处理机制实例分析

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

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

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

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

下载Word文档
猜你喜欢
  • Go错误处理机制实例分析
    这篇文章主要讲解了“Go错误处理机制实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Go错误处理机制实例分析”吧!Go 错误处理机制Go 内置 errorsGo 语言中的 e...
    99+
    2023-07-02
  • 分析Go错误处理优化go recover机制缺陷
    目录引言语法说明新提案讨论总结引言 Go 的错误处理一直是表现最突出的一块地方,许许多多的同学都提出了各种提案,例如:引入 try-catch、用 panic 代替 if err !...
    99+
    2022-11-13
  • PHP错误处理举例分析
    本篇内容介绍了“PHP错误处理举例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!展示一个打开文本文件的简单脚本:<php$file...
    99+
    2023-06-03
  • JavaScript错误处理机制全面分析讲解
    目录1. Error 实例2. 原生错误类型2.1 ReferenceError2.2 SyntaxError2.3 TypeError2.4 RangeError2.5 URIEr...
    99+
    2022-11-13
    JavaScript错误处理机制 JS错误处理
  • Node错误处理的示例分析
    小编给大家分享一下Node错误处理的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!01 Error JS 中的...
    99+
    2022-10-19
  • Java异常处理机制实例分析
    这篇文章主要介绍“Java异常处理机制实例分析”,在日常操作中,相信很多人在Java异常处理机制实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java异常处理机制实例分析”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-29
  • Go 错误处理实践总结示例
    目录前言Go 错误处理机制Go 内置 errorsError 与 ExceptionGo 错误处理最佳实践panicerror总结前言 最近在对极客时间毛剑老师的 Go 进阶训练营进...
    99+
    2022-11-13
  • C语言异常处理机制实例分析
    本篇内容主要讲解“C语言异常处理机制实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言异常处理机制实例分析”吧!异常处理机制:setjmp()函数与l...
    99+
    2022-10-19
  • C++中错误处理机制问题分析与解决方案
    C++中错误处理机制问题分析与解决方案引言:错误处理是软件开发过程中十分重要的一部分,能够帮助开发人员诊断、调试和修复软件中的bug。在C++中,错误处理机制主要是通过异常处理来实现的。然而,异常处理也可能引发一些问题,本文将对C++中的错...
    99+
    2023-10-22
    C++ 解决方案 错误处理机制
  • 浅析php的错误和异常处理机制
    PHP作为一种广泛应用于Web开发的语言,在开发过程中难免会出现各种各样的错误和异常。为了提高代码的稳定性和可维护性,开发人员需要对PHP的错误和异常处理机制有足够的了解和掌握。本文将详细介绍PHP的错误和异常处理机制,并提供一些最佳实践和...
    99+
    2023-05-14
    错误处理 php
  • NodeJS处理Express中异步错误的示例分析
    小编给大家分享一下NodeJS处理Express中异步错误的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Express...
    99+
    2022-10-19
  • php-fpm 502 bad gateway错误处理的示例分析
    这篇文章主要为大家展示了“php-fpm 502 bad gateway错误处理的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“php-fpm 502 ...
    99+
    2022-10-19
  • Python异常处理机制的示例分析
    这篇文章将为大家详细讲解有关Python异常处理机制的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。什么是异常?def num(a, b):   ...
    99+
    2023-06-22
  • Java异常处理机制的示例分析
    这篇文章给大家分享的是有关Java异常处理机制的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.初识异常我们在写代码的时候都或多或少碰到了大大小小的异常,例如:public class&nbs...
    99+
    2023-06-26
  • SpringBoot2.1.4中的错误处理机制
    目录SpringBoot 2.1.4 错误处理机制SpringBoot错误机制原理SpringBoot 2.1.3 错误处理机制引用的问题做个标记错误处理机制SpringBoot 2...
    99+
    2022-11-12
  • Vue.js@2.6.10更新内置错误处机制Fundebug同步支持相应错误监控的示例分析
    这篇文章将为大家详细讲解有关Vue.js@2.6.10更新内置错误处机制Fundebug同步支持相应错误监控的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Vue...
    99+
    2022-10-19
  • Java反射机制原理实例分析
    今天小编给大家分享一下Java反射机制原理实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。什么是反射?反射机制是在运行...
    99+
    2023-06-29
  • Go 包管理机制深入分析
    前言随着 Go 语言的深入使用,其依赖管理机制也一直是各位 Gopher 热衷于探讨的话题。Go 语言的源码依赖可通过 go get 命令来获取,但自动化程度不高,于是官方提供了 Dep 这样的自动化批量管理依赖的工具。...
    99+
    2023-06-04
  • Elasticsearches打分机制实例分析
    今天小编给大家分享一下Elasticsearches打分机制实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一 例子现...
    99+
    2023-06-30
  • go zero微服务处理方法实例分析
    这篇文章主要介绍“go zero微服务处理方法实例分析”,在日常操作中,相信很多人在go zero微服务处理方法实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”go zer...
    99+
    2023-07-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作