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

GoLang实现每次GET请求生成新JSON文件的技术求助

解决每次请求生成新JSON文件的问题

嗨,作为Go新手碰到这个问题太正常啦!你现在的代码里每次都固定创建output.json,自然会被新请求覆盖。咱们只需要给每个文件生成唯一的文件名就行,这里给你两种简单好用的方案:

方案1:用时间戳生成唯一文件名

时间戳是最直接的方式,因为每个请求的时间(精确到秒)都是唯一的,这样生成的文件名永远不会重复。

修改你代码里创建文件的那部分:

// 替换原来的 os.Create("output.json")
timestamp := time.Now().Format("20060102150405") // Go的参考时间格式,别改哦
filename := fmt.Sprintf("output_%s.json", timestamp)
out, err := os.Create(filename)
if err != nil {
    w.WriteHeader(500)
    w.Write([]byte(fmt.Sprintf("Failed to create file: %v", err)))
    return
}
defer out.Close()
io.Copy(out, api_resp.Body)

这样生成的文件名会是output_20240520143522.json这种格式,清晰又唯一。

方案2:用UUID生成更可靠的文件名

如果你的服务可能在同一秒处理多个请求,时间戳就有极小概率重复,这时候UUID(通用唯一识别码)是更稳妥的选择。

首先需要安装UUID包:

go get github.com/google/uuid

然后修改代码:

import "github.com/google/uuid"

// ... 其他代码 ...

// 创建唯一文件名
uuidStr := uuid.New().String()
filename := fmt.Sprintf("output_%s.json", uuidStr)
out, err := os.Create(filename)
if err != nil {
    w.WriteHeader(500)
    w.Write([]byte(fmt.Sprintf("Failed to create file: %v", err)))
    return
}
defer out.Close()
io.Copy(out, api_resp.Body)

生成的文件名会是output_1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed.json,完全不用担心重复问题。

额外小建议

  1. 错误处理:原代码里的// panic?别留空,像上面那样把错误返回给客户端或者记录日志,方便排查问题。
  2. 文件路径:如果想把文件存在特定目录,记得先确保目录存在(比如用os.MkdirAll),不然创建文件会失败。
  3. 关联请求:如果需要把文件名和请求关联起来,可以把请求的ID、用户ID等作为文件名的一部分,方便后续查找。

内容的提问来源于stack exchange,提问作者Gordon Soh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:19:04