ZBLOG

/usr/local/go/src/runtime/map_faststr.go:205 (0x415619) mapassign_faststr: panic(plainError("assignment to entry in nil map")) /root/chenmeng/nrf_db/nrf/producer/nf_management.go:445 (0xb434af) GetNFInstanceProcedure: response[k] = v

从您提供的错误信息来看,程序在尝试给 response 映射赋值时引发了 panic,原因是 response 是一个 nil 的映射。这通常发生在您没有正确初始化映射就尝试进行操作的时候。

在 Go 语言中,当你声明一个 map,但不为它分配内存(即不使用 make 函数),它的初始值是 nil。如果你试图对一个 nil map 进行赋值,就会导致 panic。根据您之前的代码示例,需要确保在使用前正确地初始化 response

修复方法

  1. 确保在返回之前对 response 进行了初始化。
  2. 使用 make(map[string]interface{}) 来初始化它。

修改后的代码示例

  1. package main
  2. import (
  3. "log"
  4. "github.com/go-redis/redis/v8" // 确保你已安装 go-redis 包
  5. "golang.org/x/net/context"
  6. )
  7. var ctx = context.Background()
  8. // 假设 db.GetRedisDb() 返回的是一个已初始化的 Redis 客户端
  9. var redisDb *redis.Client
  10. func GetNFInstanceProcedure(nfInstanceID string) (response map[string]interface{}) {
  11. // 确保 response 被正确初始化
  12. response = make(map[string]interface{})
  13. keys, err := redisDb.Keys(ctx, "nfprofile:*").Result()
  14. if err != nil {
  15. log.Println("Error fetching keys:", err)
  16. return nil // 返回 nil 表示没有找到数据或发生错误
  17. }
  18. for _, key := range keys {
  19. recordData, err := redisDb.HGetAll(ctx, key).Result()
  20. if err != nil || len(recordData) == 0 {
  21. continue // 如果获取数据出错或没有数据,继续下一个键
  22. }
  23. if recordData["nfInstanceId"] == nfInstanceID {
  24. // 将 recordData 从 map[string]string 转换为 map[string]interface{}
  25. for k, v := range recordData {
  26. response[k] = v // 填充 response 映射
  27. }
  28. return response // 直接返回找到的数据
  29. }
  30. }
  31. return nil // 如果没有找到匹配项,返回 nil
  32. }
  33. func main() {
  34. // 初始化 Redis 客户端(假设这部分已经正确设置)
  35. redisDb = redis.NewClient(&redis.Options{
  36. Addr: "localhost:6379", // Redis 地址
  37. Password: "", // 无密码情况下为 ""
  38. DB: 0, // 默认数据库
  39. })
  40. nfInstanceID := "example_id" // 替换为实际的 nfInstanceId 值
  41. result := GetNFInstanceProcedure(nfInstanceID)
  42. if result != nil {
  43. log.Println("Record found:", result)
  44. } else {
  45. log.Println("No record found for the given NF Instance ID.")
  46. }
  47. }

注意事项:

  • 确保在进入循环和处理逻辑之前,将 response 正确地初始化为非 nil 的空 map。
  • 对于所有可能抛出异常或导致程序崩溃的地方,请考虑添加适当的错误处理机制,以增强程序的健壮性。


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?