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
相关产品推荐
相关产品推荐

