我想解析Web请求的响应,但是在以字符串形式访问它时遇到了麻烦。
func main() { resp, err := http.Get("http://google.hu/") if err != nil { // handle error } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) ioutil.WriteFile("dump", body, 0600) for i:= 0; i < len(body); i++ { fmt.Println( body[i] ) // This logs uint8 and prints numbers } fmt.Println( reflect.TypeOf(body) ) fmt.Println("done") }
如何以字符串形式访问响应?ioutil.WriteFile将响应正确地写入文件。
ioutil.WriteFile
我已经检查过包参考,但并没有真正的帮助。
bs := string(body) 应该足以给你一个字符串。
bs := string(body)
从那里,您可以将其用作常规字符串。
有点像这个线程:
var client http.Client resp, err := client.Get(url) if err != nil { log.Fatal(err) } defer resp.Body.Close() if resp.StatusCode == http.StatusOK { bodyBytes, err := ioutil.ReadAll(resp.Body) if err != nil { log.Fatal(err) } bodyString := string(bodyBytes) log.Info(bodyString) }
另请参阅GoByExample。
如下所述在zzn的答案中,这是一次转换 (请参阅spec)。
有些转换与强制转换相同,例如uint(myIntvar),只是重新解释了适当的位。
uint(myIntvar)
索尼娅补充说:
从字节片中制作字符串,肯定涉及在堆上分配字符串。不变性迫使这一点。 有时,您可以通过使用[] byte进行尽可能多的工作,然后在最后创建一个字符串来进行优化。该bytes.Buffer类型通常很有用。
bytes.Buffer