Go Http client 进行 POST 请求时,由于网络异常引起的异常
body := bytes.NewBuffer([]byte(data))
req, err:= http.NewRequest("POST", url, body)
client := &http.Client{}
resp, err:= client.Do(req)
if err != nil {
panic(err) //异常在这里
}
defer resp.Body.Close()
1
zhujinliang 2016-05-09 13:55:12 +08:00 via iPhone
不要 panic ,直接 return 就忽略掉了
|
4
WildCat 2016-05-09 14:24:12 +08:00 via iPhone
:=
|
5
raincious 2016-05-09 14:30:52 +08:00 1
@WildCat
Golang 里千万不要忽略错误,尤其这种很可能发生的。 而且这个跟:=或者=没啥关系。 楼主正常返回是什么样的? 如果我来写这个的话,应该会 return err ,然后让调用层来处理对应的错误。 https://github.com/raincious/trailk/blob/master/source/src/trailk/appengine/urlfetch/wrapper.go#L63 如果想要忽略的话,可以尝试返回一个空内容,这样至少不会出错,但是不推荐忽略任何错误。 |
6
Phant0m OP |
7
raincious 2016-05-09 14:51:25 +08:00
@Phant0m
可能是我说的不准确,空内容不是返回 nil ,而是返回比如空字符串之类。 比如你的代码里,可以建立一个空的(无作用的) Response ( https://golang.org/pkg/net/http/#Response ),然后进行返回(比如 return http.Response{})。但是当然这是不建议的。 正确的方法是返回 nil 附带一个错误,比如 return nil, err ,然后调用层 if 这个返回的 err 再进行处理。 |
8
mengzhuo 2016-05-09 15:01:19 +08:00 via iPhone
不 panic 不就好了……
直接返回 err 和 数据 让上层接口决定怎么处理 |
10
eastany 2016-05-09 15:57:11 +08:00
都 panic 了 Body 必然为 nil ,你再 defer 肯定出错了。
|
11
yougg 2016-05-09 22:34:28 +08:00
楼主建议你打死都不要在自己的代码里面写 panic, 这不是 Java.
|