go waitgroup.done()异常处理_「Go 学习笔记」 闭包 / Defer / Error

本文介绍了Go语言中的闭包概念,通过案例展示了闭包如何引用外部变量实现累加效果。接着讲解了Defer机制,它是用于在函数结束时确保资源得到释放的一种方式。最后讨论了Go中的错误处理,包括如何使用Defer+Recover捕获和处理异常,以及自定义错误的方法。
摘要由CSDN通过智能技术生成

闭包 / Defer / Error

闭包

介绍

基本介绍: 闭包就是一个函数和与其

2720c20b2f6225a59b3765d850618d96.png

Go

相关的引用环境组成的一个整体(实体)

案例演示

// 闭包的测试func AddUpper() func( int ) int {    var n int = 10 ;    return func(i int) int {        n = n + i        return n    }}func main() {    // 闭包的测试    addUpper := function.AddUpper()    fmt.Println(addUpper(1))    fmt.Println(addUpper(2))}

说明

  • AddUpper() 是一个函数,返回的数据类型是 func(int) int .
  • 闭包的说明: 返回的是一个函数,如演示中的匿名函数,但是这个匿名函数引用到了函数外的资源 n , 因此,匿名函数和 n 形成一个整体,从而构成一个闭包。
  • 可以这么理解: 闭包是一个类,这个函数是方法, n 是变量。
  • 当我们反复调用 addUpper 时,n 是初始化一次,构成了累加。
  • 闭包的关键在于 返回的函数引用到了哪些变量?

Defer的理解

介绍

在函数中,程序员经常需要创建资源(比如:数据库连接、文件句柄、锁等) ,为了在 函数执行完毕后,及时的释放资源,Go 的设计者提供 defer (延时机制)。

案例演示

func Sum(x , y int) int{    // 当执行到 defer 时,会将当前的语句压入到 defer 的独立的栈中,暂时不会去执行    defer fmt.Println("x = " , x)    // 当当前函数执行结束后,在从 defer 栈中先入后出的原则去执行    defer fmt.Println("y = " , y)    res := x + y    fmt.Println("res = " , res)    return res}func main() {    sum := function.Sum(10, 20)    fmt.Println("sum = " , sum)}

执行的结果如下:

res =  30y =  20x =  10sum =  30

Defer的价值 当函数执行完毕后,可以及时的释放函数创建的资源

GO 中的错误的处理方式

演示案例

func ErrorTest(){    num1 := 10    num2 := 0    res := num1 / num2    fmt.Println(res)}

执行的结果如下:

panic: runtime error: integer divide by zerogoroutine 1 [running]:go-learn/src/function.ErrorTest()    D:/Projects/GoProjects/go-learn/src/function/error.go:13 +0x11main.main()    D:/Projects/GoProjects/go-learn/main.go:11 +0x27

对于异常,的处理方案如下:

  1. 使用 defer + recover 来捕获异常并处理func ErrorTest(){ defer func() { err := recover() if err != nil { fmt.Println("err = " , err) } }() num1 := 10 num2 := 0 res := num1 / num2 fmt.Println(res) }

自定义错误

Go 中,可以对错误进行自定义,一般使用 errors.New("") / panic("" )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值