私はGoLangタイプのシステムの周りを頭で覆そうとしていますが、いくつか混乱しています。ゴランタイプのシステムの不一致(httpパッケージ)
私はこれを理解しようとするためにhttpライブラリに取り組んできましたが、私は意味をなさない以下を見てきました。
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))
}
これはコンバート機能は、それがレスポンスボディがタイプio.closerであり、ioutil.Readallがio.readerを取るという事実である必要はないという事実に関するものではありません、しかし、私はそれを一例で渡すことができますが、他の例ではそうではありません。魔法のように起こっているものがありますか?
私はReadメソッドを実装しているので、技術面では技術的に合格していますが、それは関数と本体の両方に当てはまるはずです。
洞察力はすばらしいと思います。
おかげ
は、なぜあなたはそれが 'するかどう' io.Closer'を受け入れるために、 'convert'をしたいですかio.Reader'? – bereal
'は、レスポンスボディがio.closer'型であるという事実です。... https://golang.org/src/net/http/response.goレスポンスのボディは' io.ReadCloser'型です。 – Gavin
申し訳ありませんが、私はここで間違いを犯しました.HTML本体のデフォルトのタイプはio.ReadCloserです。これはメインパッケージhttps://golang.org/pkg/net/http/#Responseからのものです。 –