我可以做类似下面的事情,这给了我一个响应类,但我不确定如何将 io.reader 写入文件。最直接的方法是什么?
http.Get("https://www.domain.com/some.jpg")
如果文件足够小,最简单的解决方案是使用ioutil.WriteFile结合ioutil.ReadAll :
resp, err := http.Get("your url")
bytes, err := ioutil.ReadAll(resp.Body)
err = ioutil.WriteFile(filename, bytes, 0666)
如果你的文件不是那么小,你最好避免创建和填充bytes
数组。然后你应该使用io.Copy,它只是将字节从读取器复制到写入器:
resp, err := http.Get("your url")
f, err := os.Create(filename)
defer f.Close()
_, err := io.Copy(f, resp.Body)
您必须在这两种情况下添加相关的错误处理。
ReadFrom
在某些情况下很有用:
package main
import (
"net/http"
"os"
)
func main() {
r, e := http.Get("http://speedtest.lax.hivelocity.net")
if e != nil {
panic(e)
}
defer r.Body.Close()
f, e := os.Create("index.html")
if e != nil {
panic(e)
}
defer f.Close()
f.ReadFrom(r.Body)
}