脏活累活通通交给defer,从此代码稳如老狗

前言

        golang中的defer关键字可以帮我们干很多脏活累活,合理的使用它能让我们的代码更稳而且也更可读,同时也提高了代码的可读性,以下是在日常golang编码中的一些常见的使用场景:

使用场景

资源管理or释放

        读取文件、建立网络连接、数据库连接等操作之后,为了防止资源的浪费需要及时的对这些资源进行释放:

func readFile(filename string) ([]byte, error) {
    file, err := os.Open(filename)
    if err != nil {
        return nil, err
    }
    defer file.Close() // 在函数返回前关闭文件
    // 读取文件内容
    data, err := ioutil.ReadAll(file)
    if err != nil {
        return nil, err
    }
    return data, nil
}

释放锁

        go并发编程场景会比较多,多协程之间使用互斥锁的情况比较多,因此需要合理的对锁进行释放:

var mu sync.Mutex

func safeIncrement() {
    mu.Lock()
    defer mu.Unlock() // 确保互斥锁被正确释放
    // 修改共享变量
}

panic处理

        程序中可能会存在一些逻辑会panic而导致整个程序崩溃而退出,这时候就需要使用defer进行一些处理保证程序不会退出:

func doSomething() {
    defer func() {
        if r := recover(); r != nil {
            // 恢复程序状态或执行清理操作
        }
    }()
    // 可能会触发 panic 的逻辑
}

错误处理     

        为了实现代码错误的合理处理,避免重复代码,可以使用defer进行错误处理:

func doSomething() error {
    file, err := os.Open("filename")
    if err != nil {
        return err
    }
    defer file.Close() // 确保文件被关闭
    // 文件操作
    return nil
}

以上便是对defer的一些使用总结,欢迎大家提出问题和指正。

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值