pkg networking go

networking - pkg - Acceda a la respuesta HTTP como cadena en Go



go pkg (3)

El método que está utilizando para leer la respuesta del cuerpo http devuelve un segmento de bytes:

func ReadAll(r io.Reader) ([]byte, error)

documentación oficial

Puede convertir []byte a una cadena usando

body, err := ioutil.ReadAll(resp.Body) bodyString := string(body)

Me gustaría analizar la respuesta de una solicitud web, pero tengo problemas para acceder a ella como una cadena.

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") }

¿Cómo puedo acceder a la respuesta como cadena? ioutil.WriteFile escribe correctamente la respuesta a un archivo.

Ya he verificado la referencia del paquete, pero no es realmente útil.


string (byteslice) convertirá el segmento de bytes en string, solo sepa que no solo se trata de conversión de tipo, sino también de copia de memoria.


bs := string(body) debería ser suficiente para darte una cadena.

A partir de ahí, puede usarlo como una cadena normal.

Un poco como en este hilo :

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) }

Ver también GoByExample .

Como se comenta a continuación (y en la answer zzn ), esta es una conversion (ver spec ).
Consulte " ¿Cuánto cuesta []byte(string) ? " (Problema inverso, pero se aplica la misma conclusión) donde zzzz menciona:

Algunas conversiones son iguales a una conversión, como uint(myIntvar) , que simplemente reinterpreta los bits en su lugar.

Sonia agrega:

Hacer una cadena de un segmento de bytes, definitivamente implica asignar la cadena en el montón. La propiedad de inmutabilidad fuerza esto.
A veces puede optimizar haciendo tanto trabajo como sea posible con [] byte y luego creando una cadena al final. El tipo bytes.Buffer suele ser útil.