You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求协助:使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:37:50