Go 下载文件

15 min read
package main

import (
    "io"
    "net/http"
    "os"
)

func main() {
    imgUrl := "https://www.baidu.cn/static/i/img1.jpg"

    // Get the data
    resp, err := http.Get(imgUrl)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    // 创建一个文件用于保存
    out, err := os.Create("img1.jpg")
    if err != nil {
        panic(err)
    }
    defer out.Close()

    // 然后将响应流和文件流对接起来
    _, err = io.Copy(out, resp.Body)
    if err != nil {
        panic(err)
    }
}

io.Copy() 方法实现了两个文件指针之间的内容拷贝。该方法的原型如下

func Copy(dst Writer, src Reader) (written int64, err error)

io.Copy() 方法将副本从 src 复制到 dst ,直到 src 达到文件末尾 ( EOF ) 或发生错误,然后返回复制的字节数和复制时遇到的第一个错误( 如果有 )

有了这个函数,我们就省去了先把内容读取到内存,然后将内存中的内容写到文件的过程