ZBLOG

nfTypeCond := bson.M{"reqNfType": nfProfile.NfType} setUriListByFilter(nfTypeCond, &uriList),func setUriListByFilter(filter map[string]string, uriList *[]string) { redisDb := db.GetRedisDb() filterNfTypeResultsRaw, err := redisDb.HGetAll("Subs...

在你的代码片段中,你正在从 Redis 数据库中获取所有的 “Subscriptions” 并过滤符合条件的结果。为了使这个函数更清晰并有效地工作,我将展示如何完善 setUriListByFilter 函数,使其能够根据传入的过滤条件填充 uriList

完整的代码示例

以下是对你提供的代码进行扩展和优化后的实现:

import (
    "github.com/go-redis/redis/v8"
    "go.mongodb.org/mongo-driver/bson"
    "log"
)

// 设定数据库连接
var redisDb *redis.Client // 假设你已经正确初始化了 Redis 客户端

func setUriListByFilter(filter bson.M, uriList *[]string) {
    filterNfTypeResultsRaw, err := redisDb.HGetAll("Subscriptions").Result()
    if err != nil {
        logger.ManagementLog.Error(err)
        return
    }

    for key, value := range filterNfTypeResultsRaw {
        // 在这里解析 value(假设它是 JSON 字符串)到结构体,便于判断是否匹配条件
        var subscriptionData models.NrfSubscriptionData
        if err := json.Unmarshal([]byte(value), &subscriptionData); err != nil {
            logger.ManagementLog.Error("Error unmarshaling data for key %s: %v", key, err)
            continue // 如果解析失败,则跳过该条数据
        }
        
        // 检查 nfProfile.NfType 是否匹配
        if nfType, ok := filter["reqNfType"]; ok && subscriptionData.NfType == nfType {
            *uriList = append(*uriList, subscriptionData.Uri) // 假设你要提取 Uri 字段
        }
    }
}

调用方式

调用 setUriListByFilter 时,确保传入正确的过滤条件和一个空切片来接收结果。例如:

nfTypeCond := bson.M{"reqNfType": nfProfile.NfType}
var uriList []string

setUriListByFilter(nfTypeCond, &uriList)

// 处理 uriList,比如返回给客户端或进一步操作

说明

  1. Redis 获取数据:我们使用 HGetAll 方法从 Redis 中获取所有订阅信息。
  2. JSON 解析:因为从 Redis 返回的是字符串,所以需要将其解析为相应的数据结构(如 models.NrfSubscriptionData),以便于访问具体字段。
  3. 条件匹配:通过检查传入的过滤条件来决定是否将特定的 URI 添加到结果列表中。
  4. 错误处理:在每一步都进行了错误处理,以确保在出现问题时可以记录并跳过有问题的数据。

这种方式让代码更加健壮,并且易于维护,同时也提高了可读性。


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?