package main import ( "context" "encoding/json" "fmt" "github.com/redis/go-redis/v9" ) type Per struct { Name string `json:"name"` Age int `json:"age"` } type Beacon struct { ID string `json:"id"` // Use JSON tags to ensure correct field names Type string `json:"type"` Temp int `json:"temp"` Name string `json:"name"` } func ConvertStructToMap(obj any) (map[string]any, error) { // 1. Marshal the struct into a JSON byte slice data, err := json.Marshal(obj) if err != nil { return nil, err } // 2. Unmarshal the JSON byte slice into the map var result map[string]any err = json.Unmarshal(data, &result) if err != nil { return nil, err } return result, nil } // func main() { ... } // client.HSet(ctx, "beacon:123", resultMap).Err() func main() { client := redis.NewClient(&redis.Options{ Addr: "127.0.0.1:6379", Password: "", }) ctx := context.Background() err := client.Set(ctx, "testkey", "hello world", 0).Err() if err != nil { fmt.Println("Ok") } val, err := client.Get(ctx, "testkey").Result() if err != nil { fmt.Println("Ok") } fmt.Println(val) b := Beacon{ ID: "hello", Type: "node", Temp: 10, Name: "Peter", } per := Per{ Name: "Janez", Age: 10, } bEncoded, err := ConvertStructToMap(b) if err != nil { fmt.Print("error\n") } perEncoded, err := ConvertStructToMap(per) if err != nil { fmt.Print("error\n") } err = client.HSet(ctx, "myhash", bEncoded).Err() fmt.Println(err) res, _ := client.HGetAll(ctx, "myhash").Result() fmt.Println(res) err = client.HSet(ctx, "myhash", perEncoded).Err() fmt.Println(err) res, _ = client.HGetAll(ctx, "myhash").Result() fmt.Println(res) }