理想的方法 不是
使用
ioutil.ReadAll,而是直接在阅读器上使用解码器。这是一个不错的函数,它获取url并将其响应解码到
target结构上。
var myClient = &http.Client{Timeout: 10 * time.Second}func getJson(url string, target interface{}) error { r, err := myClient.Get(url) if err != nil { return err } defer r.Body.Close() return json.NewDeprer(r.Body).Depre(target)}使用示例:
type Foo struct { Bar string}func main() { foo1 := new(Foo) // or &Foo{} getJson("http://example.com", foo1) println(foo1.Bar) // alternately: foo2 := Foo{} getJson("http://example.com", &foo2) println(foo2.Bar)}您不应该
*http.Client在生产中使用默认结构,如最初回答的那样!(
http.Get/
etc调用的是哪个)。原因是默认客户端没有设置超时。如果远程服务器无响应,那将是糟糕的一天。



