源代码如下:
package main
import (
"fmt"
"io/ioutil"
"net/http"
)
func main() {
//模拟ios客户端发送get请求
client := new(http.Client)
reg, err := http.NewRequest("GET", `https://itunes.apple.com/WebObjects/MZStore.woa/wa/viewTop?cc=cn&genreId=36&popId=27`, nil)
if err != nil {
fmt.Println("Error1:", err)
return
}
reg.Header.Set(`HTTP`, `2.0`)
reg.Header.Set(`Accept`, `*/*`)
reg.Header.Set(`Accept-Language`, `zh-cn`)
reg.Header.Set(`User-Agent`, `AppStore/2.0 iOS/7.1.2 model/iPod5,1 build/11D257 (4; dt:81)`)
reg.Header.Set(`Host`, `itunes.apple.com`)
reg.Header.Set(`Connection`, `keep-alive`)
reg.Header.Set(`X-Apple-Store-Front`, `143465-19,21 t:native`)
reg.Header.Set(`X-Dsid`, `932530590`)
//reg.Header.Set(`Cookie`, `xp_ci=3z1E7umazD0Dz5SBzCwNzB7weVKgD; s_vi=[CS]v1|29F61F868501299A-60000114E000452B[CE]; Pod=20; itspod=20; xt-src=b; xt-b-ts-932530590=1408324780262; mz_at_ssl-932530590=AwUAAAFRAAER1gAAAABT8vlrAo2EAZQvwAJjChIlGtIxIKYErLQ=; mz_at0-932530590=AwQAAAFRAAER1gAAAABT8VSrdHM0dXgdzosavj4+sT0AJfhYBx4=; wosid-lite=qQmZVeBH9vj91TakAeKEZg; ns-mzf-inst=35-163-80-118-68-8171-202429-20-nk11; X-Dsid=932530590`)
//执行get请求
resp, err := client.Do(reg)
defer resp.Body.Close()
if err != nil {
fmt.Println("Error2:", err)
return
}
//分隔符
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return
}
fmt.Println(string(body))
}
我的问题是:在分隔符处,json已经存放在resp.Body里了。我们知道golang对json的处理是要转换成[]byte的形式的。可这里如果先用
body, err := ioutil.ReadAll(resp.Body)
然后再将body转换成string类型,最后再将string类型转换为[]btyte的形式,感觉上很麻烦,而且性能上经过这几次转换也有一定消耗。
在分隔符处,是否有更简便的方案将resp.Body内的json转换为[]byte的形式以方便后续的处理呢?