Ich versuche, meinen Kopf rund um das GoLang-System zu wickeln, und dort ein paar Dinge, die mich verwirren.Golang Typ Systeminkonsistenz (http-Paket)
Also habe ich an der http-Bibliothek gearbeitet, um zu versuchen, dies zu verstehen, und ich bin auf die folgenden, die keinen Sinn ergeben.
package main
import (
"net/http"
"fmt"
"io/ioutil"
"io"
)
func convert(closer io.Closer) ([]byte) {
body, _ := ioutil.ReadAll(closer);
return body
}
func main() {
client := &http.Client{}
req, _ := http.NewRequest("GET", "https://www.google.com", nil)
response, _ := client.Do(req);
body, _ := ioutil.ReadAll(response.Body)
fmt.Println(body);
fmt.Println(convert(response.Body))
}
dies nicht über die Tatsache, dass die CONVERT-Funktion nicht benötigt wird, es ist die Tatsache, daß der Antworttext vom Typ io.closer ist und die ioutil.Readall nimmt eine io.reader, Aber ich kann es in einem Fall weitergeben, aber nicht in einem anderen. Gibt es etwas, das mir fehlt, das magisch passiert?
Ich weiß, dass die Schnittstelle des Lesers technisch näher kommt, da es die Read-Methode implementiert, aber das sollte sowohl in der Funktion als auch im Hauptteil wahr sein.
Jeder Einblick wäre großartig.
Dank
Warum wollen Sie '' convert' io.Closer' zu akzeptieren, wenn es 'sein sollte io.Reader'? – bereal
'ist die Tatsache, dass der Antworttext vom Typ io.closer' ... ist https://golang.org/src/net/http/response.go Der Text einer Antwort ist vom Typ' io.ReadCloser'. – Gavin
Entschuldigung, ich habe einen kleinen Fehler gemacht, der Standardtyp des http body ist io.ReadCloser der aus dem Hauptpaket https://golang.org/pkg/net/http/#Response stammt. –