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,完全不用担心重复问题。
额外小建议
- 错误处理:原代码里的
// panic?别留空,像上面那样把错误返回给客户端或者记录日志,方便排查问题。 - 文件路径:如果想把文件存在特定目录,记得先确保目录存在(比如用
os.MkdirAll),不然创建文件会失败。 - 关联请求:如果需要把文件名和请求关联起来,可以把请求的ID、用户ID等作为文件名的一部分,方便后续查找。
内容的提问来源于stack exchange,提问作者Gordon Soh
相关产品推荐
相关产品推荐

