请求协助:使用Go语言http.Get下载指定URL的Zip文件
完整实现Go语言下载Zip文件的代码
没问题,我来帮你补全这个Zip文件的下载逻辑!你已经用http.Get发起了请求,接下来咱们把剩下的步骤完善,确保文件能正确保存到本地:
package main import ( "io" "log" "net/http" "os" ) func main() { specUrl := "https://www.3gpp.org/ftp//Specs/archive/29_series/29.512/29.512-f20.zip" // 发起HTTP GET请求 resp, err := http.Get(specUrl) if err != nil { log.Fatalf("请求失败: %v", err) } // 必须关闭响应体,避免资源泄漏 defer resp.Body.Close() // 检查响应状态码,确保请求成功 if resp.StatusCode != http.StatusOK { log.Fatalf("请求返回错误状态码: %d %s", resp.StatusCode, resp.Status) } // 创建本地文件,准备写入 outFile, err := os.Create("29.512-f20.zip") if err != nil { log.Fatalf("创建文件失败: %v", err) } defer outFile.Close() // 将响应体内容复制到本地文件 _, err = io.Copy(outFile, resp.Body) if err != nil { log.Fatalf("写入文件失败: %v", err) } log.Println("Zip文件下载完成!") }
关键细节说明:
- defer关闭资源:
resp.Body和outFile都用defer确保在函数结束前关闭,防止内存泄漏和文件句柄占用 - 状态码检查:不要跳过这一步,如果返回404、500这类错误码,直接终止流程并提示
- 高效写入:用
io.Copy来处理数据流,它会自动使用合适的缓冲区大小,比手动读取写入更高效,尤其适合大文件 - 错误处理:每一步的错误都做了捕获和日志输出,方便排查问题
如果需要自定义保存路径,只需要修改os.Create里的文件名参数就行啦。
内容的提问来源于stack exchange,提问作者swamydkv
相关产品推荐
相关产品推荐

