ZBLOG

response := UpdateSubscriptionProcedure(subscriptionID, patchJSON) if response != nil { return http_wrapper.NewResponse(http.StatusOK, nil, response) } else { return http_wrapper.NewResponse(http.StatusNoContent, nil, nil) } 修改下上面UpdateSu...

为了更好地处理 UpdateSubscriptionProcedure 函数的返回值并确保在 HTTP 响应中能正确传递信息,我们可以将其返回类型修改为一个自定义结构体,该结构体包含状态、数据和错误信息。这将使得调用该函数时,能够更清晰地知道结果。

以下是改进后的代码示例:

自定义响应结构

首先,我们定义一个自定义的响应结构体,例如 UpdateResponse

  1. type UpdateResponse struct {
  2. Success bool `json:"success"`
  3. Data models.NrfSubscriptionData `json:"data,omitempty"`
  4. Error string `json:"error,omitempty"`
  5. }

修改后的 UpdateSubscriptionProcedure

然后,在 UpdateSubscriptionProcedure 中使用这个新的返回类型:

  1. func UpdateSubscriptionProcedure(subscriptionID string, patchJSON []byte) UpdateResponse {
  2. redisDb := db.GetRedisDb()
  3. // 从 Redis 获取原始数据
  4. originalJSON, err := redisDb.HGet("Subscriptions", subscriptionID).Result()
  5. if err != nil {
  6. log.Printf("Error getting original data from Redis: %v", err)
  7. return UpdateResponse{Success: false, Error: "subscription not found"}
  8. }
  9. var original []byte = []byte(originalJSON)
  10. patch, err := jsonpatch.DecodePatch(patchJSON)
  11. if err != nil {
  12. log.Printf("Error decoding JSON patch: %v", err)
  13. return UpdateResponse{Success: false, Error: "invalid patch format"}
  14. }
  15. modified, err := patch.Apply(original)
  16. if err != nil {
  17. log.Printf("Error applying JSON patch: %v", err)
  18. return UpdateResponse{Success: false, Error: "failed to apply patch"}
  19. }
  20. modifiedData := models.NrfSubscriptionData{}
  21. if err := json.Unmarshal(modified, &modifiedData); err != nil {
  22. log.Printf("Error unmarshaling modified data: %v", err)
  23. return UpdateResponse{Success: false, Error: "failed to decode modified data"}
  24. }
  25. result := redisDb.HSet("Subscriptions", subscriptionID, modifiedData)
  26. if result.Err() != nil {
  27. log.Printf("Error saving updated data to Redis: %v", result.Err())
  28. return UpdateResponse{Success: false, Error: "failed to save updated subscription"}
  29. }
  30. return UpdateResponse{Success: true, Data: modifiedData}
  31. }

调用方修改

接着,更新调用该函数的部分,以适应新的返回值类型:

  1. response := UpdateSubscriptionProcedure(subscriptionID, patchJSON)
  2. if response.Success {
  3. return http_wrapper.NewResponse(http.StatusOK, nil, response.Data)
  4. } else {
  5. return http_wrapper.NewResponse(http.StatusBadRequest, nil, response.Error) // 或者使用其他合适的状态码
  6. }

关键改动:

  1. 自定义响应类型:引入了一个自定义的响应结构体,使得成功与失败的信息更加明确。

  2. 函数返回类型更新UpdateSubscriptionProcedure 返回 UpdateResponse 类型而不是简单的映射。

  3. 调用部分更新:根据新的响应格式调整调用结果处理逻辑。现在可以直接检查 response.Success 并使用相应的数据或错误信息构建 HTTP 响应。

这种设计方式让你能够在处理逻辑中保持一致性,同时也增强了代码可读性和可维护性。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=21224

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?