亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將 Redis 訂閱 []uint8 輸出轉換為字符串

將 Redis 訂閱 []uint8 輸出轉換為字符串

Go
慕田峪7331174 2022-09-26 15:21:52
我正在使用下面提到的代碼從 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}
查看完整描述

1 回答

?
慕斯王

TA貢獻1864條經驗 獲得超2個贊

[]uint8與 [] 字節同義,字節切片可以使用轉換表達式轉換為字節切片。string

    將字節片轉換為字符串類型將生成一個字符串,其連續字節是切片的元素。

    string([]byte{'h', 'e', 'l', 'l', '\xc3', '\xb8'})   // "hell?"

    string([]byte{})                                     // ""

    string([]byte(nil))                                  // ""


    type MyBytes []byte string(MyBytes{'h', 'e', 'l', 'l', '\xc3',

    '\xb8'})  // "hell?"

    因此,以下各項應該就足夠了:


    string(v.Data)

    您還可以使用 中的謂詞打印字符串而不進行轉換:%sfmt


    fmt.Printf("Output: %s", v.Data)

    示例:https://play.golang.org/p/JICYPfOt-fQ


    data := []uint8(`test-message`)

    fmt.Println(data)

    fmt.Println(string(data))

    fmt.Printf("%s\n", data)


    查看完整回答
    反對 回復 2022-09-26
    • 1 回答
    • 0 關注
    • 144 瀏覽
    慕課專欄
    更多

    添加回答

    舉報

    0/150
    提交
    取消
    微信客服

    購課補貼
    聯系客服咨詢優惠詳情

    幫助反饋 APP下載

    慕課網APP
    您的移動學習伙伴

    公眾號

    掃描二維碼
    關注慕課網微信公眾號