如何在函数中处理http.Get中的错误

时间:2015-07-07 14:56:35

标签: go

我有这个功能的问题:

func execute(query Query) (goreq.Response, error) {

    res, err := goreq.Request{
        Uri:         "http://path/to/host",
        QueryString: query,
        Accept:      "application/json",
        UserAgent:   "XXXGoClient/1.0",
        Timeout:     2000 * time.Millisecond,
        Compression: goreq.Gzip(),
        //ShowDebug:   true,
    }.Do()

    return *res, err
}

当http请求中出现错误时,我收到panic: runtime error: invalid memory address or nil pointer dereference

我知道我会检查这样的事情:

if err != nil {
    // do somthing here
}

但我不知道我必须做什么,例如:

if err != nil {
    return
}

我得到./main.go:113: not enough arguments to return

3 个答案:

答案 0 :(得分:2)

我不习惯在go中使用http请求,但我猜错误来自' * res'作为' res'如果出现错误,则为零。

我要做的是返回指针(* goreq.Response),避免取消引用:

func execute(query Query) (*goreq.Response, error) {
    return goreq.Request{
       // original code goes here
    }.Do()
}

在这种情况下,您将取消引用需要响应值的指针,如果错误不是nil,则可以忽略。

希望它有所帮助。

答案 1 :(得分:1)

最后我按照以下方式解决此问题

if err != nil {
    var empty goreq.Response
    return empty, err
}

答案 2 :(得分:-1)

从我有限的经验来看,错误就是价值观。您的函数返回两个值return是不够的。如果没有回复的话,return nil, nil怎么样...... 或者您可以使用panic(err)将其关闭。取决于请求失败时您想要做什么。