我有这个功能的问题:
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
答案 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)
将其关闭。取决于请求失败时您想要做什么。