You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

132 line
2.4 KiB

  1. package main
  2. import (
  3. "context"
  4. "encoding/json"
  5. "fmt"
  6. "reflect"
  7. "github.com/redis/go-redis/v9"
  8. )
  9. type Per struct {
  10. Name string `json:"name"`
  11. Age int `json:"age"`
  12. }
  13. type Beacon struct {
  14. ID string `json:"id"` // Use JSON tags to ensure correct field names
  15. Type string `json:"type"`
  16. Temp int `json:"temp"`
  17. Name string `json:"name"`
  18. }
  19. func ConvertStructToMap(obj any) (map[string]any, error) {
  20. // 1. Marshal the struct into a JSON byte slice
  21. data, err := json.Marshal(obj)
  22. if err != nil {
  23. return nil, err
  24. }
  25. // 2. Unmarshal the JSON byte slice into the map
  26. var result map[string]any
  27. err = json.Unmarshal(data, &result)
  28. if err != nil {
  29. return nil, err
  30. }
  31. return result, nil
  32. }
  33. // func main() { ... }
  34. // client.HSet(ctx, "beacon:123", resultMap).Err()
  35. func main() {
  36. client := redis.NewClient(&redis.Options{
  37. Addr: "127.0.0.1:6379",
  38. Password: "",
  39. })
  40. ctx := context.Background()
  41. err := client.Set(ctx, "testkey", "hello world", 0).Err()
  42. if err != nil {
  43. fmt.Println("Ok")
  44. }
  45. val, err := client.Get(ctx, "testkey").Result()
  46. if err != nil {
  47. fmt.Println("Ok")
  48. }
  49. fmt.Println(val)
  50. err = client.SAdd(ctx, "myset", "b-1").Err()
  51. if err != nil {
  52. fmt.Println(err)
  53. }
  54. res, err := client.SMembers(ctx, "myset").Result()
  55. if err != nil {
  56. fmt.Println(err)
  57. }
  58. fmt.Println("res1: ", res)
  59. err = client.SAdd(ctx, "myset", "b-2").Err()
  60. if err != nil {
  61. fmt.Println(err)
  62. }
  63. res, err = client.SMembers(ctx, "myset").Result()
  64. if err != nil {
  65. fmt.Println(err)
  66. }
  67. fmt.Println("res1: ", res)
  68. err = client.SAdd(ctx, "myset", "b-1").Err()
  69. if err != nil {
  70. fmt.Println(err)
  71. }
  72. res, err = client.SMembers(ctx, "myset").Result()
  73. if err != nil {
  74. fmt.Println(err)
  75. }
  76. fmt.Println("res1: ", res)
  77. fmt.Println("type: ", reflect.TypeOf(res))
  78. // b := Beacon{
  79. // ID: "hello",
  80. // Type: "node",
  81. // Temp: 10,
  82. // Name: "Peter",
  83. // }
  84. // per := Per{
  85. // Name: "Janez",
  86. // Age: 10,
  87. // }
  88. // bEncoded, err := ConvertStructToMap(b)
  89. // if err != nil {
  90. // fmt.Print("error\n")
  91. // }
  92. // perEncoded, err := ConvertStructToMap(per)
  93. // if err != nil {
  94. // fmt.Print("error\n")
  95. // }
  96. // err = client.HSet(ctx, "myhash", bEncoded).Err()
  97. // fmt.Println(err)
  98. // res, _ := client.HGetAll(ctx, "myhash").Result()
  99. // fmt.Println(res)
  100. // err = client.HSet(ctx, "myhash", perEncoded).Err()
  101. // fmt.Println(err)
  102. // res, _ = client.HGetAll(ctx, "myhash").Result()
  103. // fmt.Println(res)
  104. }