为了账号安全,请及时绑定邮箱和手机立即绑定

将 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 关注
    • 145 浏览
    慕课专栏
    更多

    添加回答

    举报

    0/150
    提交
    取消
    微信客服

    购课补贴
    联系客服咨询优惠详情

    帮助反馈 APP下载

    慕课网APP
    您的移动学习伙伴

    公众号

    扫描二维码
    关注慕课网微信公众号