48

コンテンツ全体をメモリに読み込む必要がないように、ストリーム/パイプを使用するように以下のコードを変換するにはどうすればよいですか? 何かのようなもの: http.Get("http://example.com/").Pipe("./data.txt")

package main
import ("net/http";"io/ioutil")

func main() {
        resp, err := http.Get("http://example.com/")
        check(err)
        defer resp.Body.Close()
        body, err := ioutil.ReadAll(resp.Body)
        check(err)
        err = ioutil.WriteFile("./data.txt", body, 0666)
        check(err)
}
func check(e error) {
        if e != nil {
                panic(e)
        }
}
4

2 に答える 2

73

どうio.Copy()ですか?そのドキュメントはhttp://golang.org/pkg/io/#Copyにあります。

しかし、それはかなり単純です。とを与えるとio.Readerio.Writer一度に 1 つの小さなチャンクでデータをコピーします (たとえば、メモリ内のすべてを一度にコピーするわけではありません)。

したがって、次のようなものを書いてみてください。

func main() {
  resp, err := http.Get("...")
  check(err)
  defer resp.Body.Close()
  out, err := os.Create("filename.ext")
  if err != nil {
    // panic?
  }
  defer out.Close()
  io.Copy(out, resp.Body)
}

上記はテストしていません。上記の例からすぐにハッキングしましたが、お金がなければ近いはずです。

于 2013-05-01T01:13:04.537 に答える