源代码如下:
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的形式以方便后续的处理呢?