返回顶部
首页 > 资讯 > 后端开发 > GO >试了下Golang实现try catch的方法
  • 558
分享到

试了下Golang实现try catch的方法

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

目录前言能不能 try catch加入处理异常方法总结前言 golang语言有诸多优点:静态编译、协程、堪比C语言的高性能。 但是也有一些令人发指的地方 —— 经常被人调侃 五行

前言

golang语言有诸多优点:静态编译、协程、堪比C语言的高性能。

但是也有一些令人发指的地方 —— 经常被人调侃 五行代码,三行错误处理 的异常错误处理方式,如下问题出现的地方


func readFile(path string) ([]byte, error) {
    file, err := os.Open(path)
    if err != nil {
        return nil, err
    }
    defer file.Close()
    return ioutil.ReadAll(file)
}

函数readFile的功能是读出指定文件本身的内容并将其返回,同时当有错误发生时立即向调用方报告。
根据Golang编程范式,每个可能导致错误的函数都应该将error作为最后一个返回值,所以Golang代码中随处都是"if err != nil"语句。 五行代码,三行错误处理 的调侃段子由此在圈内流行

能不能 try catch

我之前常用编程语言 pythonPHP 的时候,早已经习惯 try catch 处理异常的方式。于是对 Golang 使用流程控制 配合 panic()、recover() 一直耿耿于怀,为了以后舒服今天就来实现一下原来 try catch异常错误处理方式

Golang 语言中拥有 recover() 函数作为宕机恢复机制,让程序在宕机流程中的 goroutine 中恢复。

所以我们能够用 recover() 函数作为程序中是否出现的钩子。当出现异常时,由它调起我们的异常处理函数。首先简单实现一下:


package main

import "fmt"

func try(userFn func()) {
 defer func() {
  if err := recover();err != nil{
   fmt.Printf("程序执行发生异常: %v\n", err)
  }
 }()

 userFn()
}

func foo(num int)  {
 if num < 10 {
  panic("number is less than 10")
 }else {
  panic("number is greater than 10")
 }
}

func main()  {
 try(func() {
  foo(9)
 })

 try(func() {
  foo(11)
 })
}

go run main.go 运行:

$ go run _test/demo3/test3.go
程序执行发生异常: number is less than 10
程序执行发生异常: number is greater than 10

从上可以看出,recover() 函数完成我们让它作为钩子,的作用,调起了打印 程序执行发生异常 的信息。

加入处理异常方法

捕抓到异常还需要处理异常,而不是简单打印 程序执行发生异常。所以还需要增加匿名方法作为异常处理方法,改造如下:


func try(userFn func(), catchFn func(err interface{})) {
 defer func() {
  if err := recover();err != nil{
   catchFn(err)
  }
 }()

 userFn()
}

...

func main()  {
 try(func() {
  foo(9)
 }, func(err interface{}) {
  fmt.Printf("程序执行发生异常: %v\n", err)
 })

 try(func() {
  foo(11)
 }, func(err interface{}) {
  fmt.Printf("程序执行发生异常: %v\n", err)
 })
}

这样就可以随心所欲传入自定义处理异常的方法

总结

以上只是自己简单实现了try catch,其中还有很多缺陷,比如:不支持 finally 函数处理,try catch封装过于简单。

到此这篇关于试了下Golang实现try catch的方法的文章就介绍到这了,更多相关Golang try catch内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: 试了下Golang实现try catch的方法

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

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

猜你喜欢
  • 试了下Golang实现try catch的方法
    目录前言能不能 try catch加入处理异常方法总结前言 Golang语言有诸多优点:静态编译、协程、堪比c语言的高性能。 但是也有一些令人发指的地方 —— 经常被人调侃 五行...
    99+
    2024-04-02
  • Golang try catch与错误处理的实现
    目录Golang try catch panic panic主要使用场景: recover error 预定义错误值 自定义错误类型 使用 panic和recover模拟 tyr...
    99+
    2024-04-02
  • Java try和catch的使用方法
    本篇内容介绍了“Java try和catch的使用方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!为防止和处理一个运行时错误,只需要把你所...
    99+
    2023-06-02
  • swift错误处理do catch try try!使用的方法是什么
    这篇“swift错误处理do catch try try!使用的方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获...
    99+
    2023-07-05
  • ​ javascript中Dima去除try-catch的方法是什么
    本篇内容主要讲解“  javascript中Dima去除try-catch的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“  ja...
    99+
    2024-04-02
  • Android Studio中快捷键实现try catch等功能包含代码块的实现方法
     Android Studio中快捷键实现try catch等功能包含代码块1、windows系统下,只需选中需包含的代码块,按快捷键Ctry+Alt+T即可;2、Ubuntu下由于快捷键已经被占用,故需要自行重新设定,设定过程如...
    99+
    2023-05-30
    android studio 快捷键
  • Golang端口复用测试的实现方法
    小编给大家分享一下Golang端口复用测试的实现方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!先给出结论:同一个进程,使用一个端口,然后连接关闭,大约需要30...
    99+
    2023-06-14
  • golang中sync.Mutex的实现方法
    目录mutex 的实现思想golang 中 mutex 的实现思想mutex 的结构以及一些 const 常量值Mutex 没有被锁住,第一个协程来拿锁Mutex 仅被协程 A 锁住...
    99+
    2024-04-02
  • 讨论golang channel的实现方法
    Golang是一门相对年轻的编程语言,但它已经受到越来越多的开发者的关注。这是它可以轻松地与其他语言进行交互和使用,并且它有一个强大且简单的并发模型,其中包括channel。本文将讨论golang channel的实现方法及其用途。什么是g...
    99+
    2023-05-14
  • linux下安装golang的方法
    Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。具有简洁、快速、安全,并行、有趣、开源,内存管理、v数组安全、编译迅速的特征。 Go 语言被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的...
    99+
    2022-06-04
    linux安装golang
  • Golang中实现除法取整的方法
    Golang中除法取整的实用方法 在编程语言中,除法运算是非常常见的运算之一。然而,在某些情况下,我们可能希望得到整数除法的结果,而不是默认的浮点数除法结果。在Golang中,有几种方法可以实现这一点。本文将...
    99+
    2024-01-29
    整数除法取整方法
  • 详解golang中session的实现方法
    在 Web 开发中,为实现不同的用户登录,我们需要使用 Session 进行用户的管理。在 Golang 程序中,如何使用 Session 呢?本文将介绍 Golang Session 的实现方法。什么是 Session?Session 是...
    99+
    2023-05-14
  • golang中实现graphql请求的方法
    目录前言安装gqlgen初始化项目编写schema生成代码编写resolver运行GraphQL服务安装Apollo客户端创建Apollo客户端执行GraphQL请求结论前言 Gra...
    99+
    2023-05-16
    golang库gqlgen使用 golang graphql请求
  • golang mq的实现方法是什么
    在Go语言中,MQ(消息队列)的实现方法通常是使用第三方的消息队列软件,然后利用相应的客户端库来与消息队列进行交互。 以下是几种常见...
    99+
    2023-10-27
    golang mq
  • VSCode中调试Golang工程的方法
    小编给大家分享一下VSCode中调试Golang工程的方法,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!关键字最简单的调试攻略多项目调试, 适用个人开发和项目开发无需修改系统环境变量准备VSCode在官网下载最新版的VSC...
    99+
    2023-06-14
  • vscode调试golang的方法是什么
    要在VSCode中调试Go代码,您需要进行以下步骤:1. 安装Go扩展:在VSCode中,点击左侧的扩展按钮,搜索并安装 "Go" ...
    99+
    2023-10-20
    vscode golang
  • python实现断点调试的方法
    目录❤  什么是bug(缺陷)❤  python代码的调试方式❤  使用 pdb 进行调试实例1.测试代码示例实例2.利用 pdb 调试实例3...
    99+
    2023-02-22
    python 断点调试
  • Golang 函数的测试和 Mock 的方法
    在 golang 中,测试函数的方法包括单元测试(通过 testing 包隔离函数)、集成测试(验证函数之间的交互)、以及 mock 测试(使用 mock 框架隔离函数)。单元测试通过编...
    99+
    2024-05-24
    测试 mock git golang 标准库
  • Golang 端口复用测试的实现
    先给出结论: 同一个进程,使用一个端口,然后连接关闭,大约需要30s后才可再次使用这个端口。 测试 首先使用端口9001连接服务端,发送数据,然后关闭连接,接着再次使用端口9001...
    99+
    2024-04-02
  • Golang函数的方法值与方法表达式实现方法
    Golang 函数的方法值与方法表达式实现方法在 Golang 中,函数是一等公民。意味着函数在语法层面上与其他值一样,可以被存储在变量中,传递给函数,也可以从函数中返回。除此之外,Golang 还提供了方法来扩展类型的行为。方法是一种特殊...
    99+
    2023-05-16
    Golang 方法值 方法表达式
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作