我正在使用下面提到的代碼從 Redis 發布-訂閱中獲取輸出。在 Redis 期間傳遞的消息發布字符串 ()。test-message但是,我在訂閱階段獲得的輸出是 類型 。以下是我在運行下面提到的代碼時獲得的輸出(而不是預期的輸出。[]uint8[116 101 115 116 45 109 101 115 115 97 103 101]test-message這是由下面提到的代碼中的此行引起的fmt.Println("Output: ", v.Data, reflect.TypeOf(v.Data)).如何在上述行的“訂閱”(即測試消息)中獲得我想要的正確輸出?我覺得我可能需要從轉換為以獲得正確的輸出。[]uint8string我的代碼在下面給出。我用這個好的答案作為我的代碼的參考。package mainimport ( "fmt" "log" "reflect" "time" "github.com/gomodule/redigo/redis")func main() { fmt.Println("Start redis test.") c, err := redis.Dial("tcp", "localhost:6379") if err != nil { log.Println(err) } else { log.Println("No error during redis.Dial.") } // defer c.Close() val := "test-message" /// Publisher. go func() { c, err := redis.Dial("tcp", "localhost:6379") if err != nil { panic(err) } count := 0 for { c.Do("PUBLISH", "example", val) // c.Do("PUBLISH", "example", // fmt.Sprintf("test message %d", count)) count++ time.Sleep(1 * time.Second) } }() /// End here /// Subscriber. psc := redis.PubSubConn{Conn: c} psc.Subscribe("example") for { switch v := psc.Receive().(type) { case redis.Message: //fmt.Printf("%s: message: %s\n", v.Channel, v.Data) fmt.Println("Output: ", v.Data, reflect.TypeOf(v.Data)) case redis.Subscription: fmt.Printf("%s: %s %d\n", v.Channel, v.Kind, v.Count) case error: fmt.Println(v) } time.Sleep(1) } /// End here}
將 Redis 訂閱 []uint8 輸出轉換為字符串
慕田峪7331174
2022-09-26 15:21:52