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

Gin+Firestore开发中dsnap.Data()返回nil导致响应多null如何修复

问题原因

响应中出现多余nil的核心原因是代码逻辑没有在错误处理后终止:

  • 当查询文档不存在触发err分支时,你已经调用c.IndentedJSON输出了{"message": "User not found"}的响应,但没有加return语句终止函数运行,后续代码会继续执行
  • 后续逻辑第二次调用c.IndentedJSON,此时文档不存在时dsnap.Data()返回nil,序列化后就输出了null,两次输出拼接就得到了你看到的异常结果
  • 额外的逻辑问题:原有代码无论文档是否存在都返回http.StatusNotFound404状态码,不符合正常接口设计逻辑

修复代码

func GetUser(c *gin.Context) {
    paramID := c.Params.ByName("id")
    // 原有其他逻辑保持不变
    dsnap, err := client.Collection("users").Doc(paramID).Get(ctx)
    if err != nil {
        fmt.Print(err)
        c.IndentedJSON(http.StatusNotFound, gin.H{
            "message": "User not found",
        })
        return // 新增return,错误处理后直接终止函数,不再执行后续逻辑
    }
    m := dsnap.Data()
    // 文档查询成功时返回200状态码和用户数据
    c.IndentedJSON(http.StatusOK, gin.H(m))
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 20:06:09