ZBLOG

result, err := redisDb.HGet(hashKey, "data").Result()

看起来你在使用 go-redis 库来从 Redis 数据库中获取数据。如果你的目标是从 Redis 中获取存储的 JSON 数据,并且你希望对该部分代码进行优化或修改,我可以为你提供帮助。

更新代码示例

以下是如何从 Redis 中获取 hashKey 下的 "data" 字段,并处理可能出现的错误:

  1. package main
  2. import (
  3. "context"
  4. "encoding/json"
  5. "fmt"
  6. "github.com/go-redis/redis/v8" // 确保导入 go-redis 包
  7. )
  8. var ctx = context.Background()
  9. type Subscription struct {
  10. NfStatusNotificationUri string `json:"nfStatusNotificationUri"`
  11. SubscriptionId string `json:"subscriptionId"`
  12. ReqNfType string `json:"reqNfType"`
  13. }
  14. type UpdateResponse struct {
  15. StatusCode int `json:"status_code"`
  16. Data interface{} `json:"data,omitempty"` // 使用 interface{} 可以灵活处理不同数据类型
  17. }
  18. // 更新订阅信息的函数
  19. func UpdateSubscriptionProcedure(redisClient *redis.Client, subscriptionID string, patchJSON []byte) UpdateResponse {
  20. // 定义哈希键名称
  21. hashKey := fmt.Sprintf("Subscriptions:%s", subscriptionID)
  22. // 更新订阅信息
  23. if err := redisClient.HSet(ctx, hashKey, "data", patchJSON).Err(); err != nil {
  24. return UpdateResponse{StatusCode: 500} // 返回错误状态码
  25. }
  26. // 获取更新后的文档
  27. result, err := redisClient.HGet(ctx, hashKey, "data").Result()
  28. // 错误处理,如果未找到该字段则返回404状态码。
  29. if err == redis.Nil {
  30. return UpdateResponse{StatusCode: 404} // 找不到资源返回404状态码
  31. } else if err != nil {
  32. return UpdateResponse{StatusCode: 500} // 返回其他错误时,返回500状态码
  33. }
  34. var subscription Subscription
  35. // 将结果解析为 Subscription 对象
  36. if err := json.Unmarshal([]byte(result), &subscription); err != nil {
  37. return UpdateResponse{StatusCode: 500} // JSON 解码失败,返回500状态码
  38. }
  39. // 返回成功响应及更新后的数据
  40. return UpdateResponse{
  41. StatusCode: 200,
  42. Data: subscription,
  43. }
  44. }
  45. func main() {
  46. redisClient := redis.NewClient(&redis.Options{
  47. Addr: "localhost:6379", // 使用适当的地址和端口连接到你的Redis服务器
  48. })
  49. subscriptionID := "68"
  50. patchData := Subscription{
  51. NfStatusNotificationUri: "https://example.com/callback",
  52. SubscriptionId: subscriptionID,
  53. ReqNfType: "AMF",
  54. }
  55. patchJSON, _ := json.Marshal(patchData)
  56. response := UpdateSubscriptionProcedure(redisClient, subscriptionID, patchJSON)
  57. if response.StatusCode != 200 {
  58. fmt.Println("Error updating subscription:", response.StatusCode)
  59. return
  60. }
  61. fmt.Printf("Updated Subscription Response: %+v\n", response.Data)
  62. }

功能说明:

  1. HGet 方法:现在包含了更详细的错误处理。我们检查是否存在值 (redis.Nil) 和其他潜在错误。
  2. 404 状态:如果尝试访问不存在的数据,将返回一个 404 状态代码。
  3. JSON 解码:如果无法解码 JSON,则会返回一个 500 状态代码。

这种方式使得代码在执行过程中更加稳健,对各种情况都有清晰的应对策略。请根据你的实际需求进行相应调整!如有进一步问题,请随时问我!


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?