作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
如何将以下代码转换为使用流/管道,这样我就不需要将全部内容读入内存?就像是: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)
}
}
最佳答案
io.Copy()
怎么样?其文档可在以下位置找到:http://golang.org/pkg/io/#Copy
不过,这很简单。给它一个 io.Reader
和一个 io.Writer
并复制数据,一次一小块(例如,不是一次全部在内存中)。
所以你可以试着写这样的东西:
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)
}
我还没有测试过以上;我只是从您上面的示例中快速将其破解,但如果不赚钱,它应该很接近。
关于go - 如何将 HTTP 响应通过管道传输到 Go 中的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16311232/
我是一名优秀的程序员,十分优秀!