英文:
how handle error in http.Get in function
问题
我有一个关于这个函数的问题:
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 {
// 在这里处理错误
}
但是我不知道我应该做什么,例如这样:
if err != nil {
return
}
我得到了./main.go:113: not enough arguments to return
。
英文:
I have a problem whith this function:
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
}
i am getting panic: runtime error: invalid memory address or nil pointer dereference
when a error in http request ocurrs.
I know that i would check for something like this:
if err != nil {
// do somthing here
}
but i dont know what i must to do, for example this:
if err != nil {
return
}
i get ./main.go:113: not enough arguments to return
答案1
得分: 2
我不习惯在Go语言中使用HTTP请求,但我猜错误可能来自于*res
,因为当出现错误时,res
是空的。
我会返回一个指针(*goreq.Response),避免解引用:
func execute(query Query) (*goreq.Response, error) {
return goreq.Request{
// 原始代码放在这里
}.Do()
}
在这种情况下,您将在需要响应值的地方解引用指针,并且如果错误不为空,则可以忽略它。
希望对您有所帮助。
英文:
I'm not used to http requests in go, but I guess the error comes from '*res' as 'res' is nil when there's an error.
What I'd do is to return a pointer (*goreq.Response), avoiding the dereference:
func execute(query Query) (*goreq.Response, error) {
return goreq.Request{
// original code goes here
}.Do()
}
In that case you will dereference the pointer where the value of the response is needed and can be ignored if the error is not nil.
Hope it helps.
答案2
得分: 1
最终我按照以下方式解决了这个问题:
if err != nil {
var empty goreq.Response
return empty, err
}
英文:
finally i resolve this as follow
if err != nil {
var empty goreq.Response
return empty, err
}
答案3
得分: -1
根据我的有限经验,错误也是一种值。你的函数返回两个值,return
是不够的。如果没有要返回的响应,可以使用 return nil, nil
。或者你可以使用 panic(err)
来终止程序。这取决于请求失败时你想要做什么。
英文:
From my limited experience, errors are values. Your function returns two values, return
, ain't enough. How about return nil, nil
if there is no response to return anyway...
Or you can bring it down with panic(err)
. Depends on what you want to do if the request fails.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论