登录
首页 >  Golang >  Go问答

编写延迟块,并在其中包含返回错误的方法

来源:stackoverflow

时间:2024-03-15 11:15:26 386浏览 收藏

一分耕耘,一分收获!既然都打开这篇《编写延迟块,并在其中包含返回错误的方法》,就坚持看下去,学下去吧!本文主要会给大家讲到等等知识点,如果大家对本文有好的建议或者看到有不足之处,非常欢迎大家积极提出!在后续文章我会继续更新Golang相关的内容,希望对大家都有所帮助!

问题内容

当我编写一个在单行代码中使用 defer 返回错误的方法时,无法进行错误处理。 ide linter 等会发出警告。

我编写了以下代码来避免它。

package main

import (
    "io/ioutil"
    "log"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://example.com", nil)
    cli := &http.Client{}
    res, _ := cli.Do(req)

    defer func() {
        _ = res.Body.Close() // catch the error
    }()

    b, _ := ioutil.ReadAll(res.Body)
    log.Println(string(b))
}


解决方案


这里的问题不是延迟,实际上是您使用 res.Body 而不检查 res.Body == nil 的事实

所以这里缺少的部分是当 cli.Do(req) 返回错误并且 res 返回 nil 时的错误处理。

您仍然可以通过添加对 res 为零的检查来执行相同的操作。 或者您可以在 cli.Do(req) 返回错误时提前停止

这里是一个例子 https://play.golang.org/p/pnETOjhNCKs

理论要掌握,实操不能落!以上关于《编写延迟块,并在其中包含返回错误的方法》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>