需要用到的包
“fmt”
“io/ioutil”
“net/http”
流程
好的,来一步步分析该代码的执行流程。
首先,我们需要发送HTTP请求来获取要下载的文件。代码中使用了Go语言内置的http
库,使用http.Client
创建了一个HTTP客户端实例,然后调用Get
方法向指定URL地址发送GET请求,获取响应结果。这里要注意,如果请求失败,err
变量不为nil
。
url := "https://empic.dfcfw.com/645451834198237185/w900h600/art"
client := http.Client{}
response, err := client.Get(url)
if err != nil {
fmt.Println("获取失败")
}
接着,我们检查响应码是否为200。若响应码不为200,意味着服务器未正常响应,这时应该输出错误信息并退出程序。
defer response.Body.Close()
if response.StatusCode != http.StatusOK {
fmt.Println("响应码错误")
}
然后,我们需要将响应体的内容写入文件中。使用ioutil
库的ReadAll
方法读取响应体中的所有内容,并将其保存到data
变量中。然后,使用ioutil
库的WriteFile
方法将data
变量的内容写入到filename
文件中。若写入文件过程中出现错误,应该输出错误信息并退出程序。
filename := "google.jpg"
data, err := ioutil.ReadAll(response.Body)
if err != nil {
fmt.Println("读取响应数据失败")
}
err = ioutil.WriteFile(filename, data, 666)
if err != nil {
fmt.Println("写入文件失败")
}
最后,不要忘记关闭响应体。
defer response.Body.Close()
至此,整个下载文件的过程就完成了。
完整代码
package main
import (
"fmt"
"io/ioutil"
"net/http"
)
func main() {
url := "https://empic.dfcfw.com/645451834198237185/w900h600/art"
client := http.Client{}
response, err := client.Get(url)
if err != nil {
fmt.Println("获取失败")
}
defer response.Body.Close()
if response.StatusCode != http.StatusOK {
fmt.Println("响应码错误")
}
filename := "google.jpg"
data, err := ioutil.ReadAll(response.Body)
if err != nil {
fmt.Println("读取响应数据失败")
}
err = ioutil.WriteFile(filename, data, 666)
if err != nil {
fmt.Println("写入文件失败")
}
}
运行结果
生成了url对应的图像