如何在rabbitmq go lang中发布和使用make(映射[string]string)

如何在rabbitmq go lang中发布和使用make(映射[string]string),go,rabbitmq,rabbitmqctl,Go,Rabbitmq,Rabbitmqctl,我有多个键值类型的对象需要发送到RabbitMQ,因此forward将使用它们。所以,通过这个链接之后。它只告诉发布简单纯文本消息的方法。有人能告诉我如何在RabbitMQ go lang中发布和使用映射对象吗 m := make(map[string]string) m["col1"] = "004999010640000" m["col2"] = "awadwaw" m["col3"] = "13" err = ch.Publish(

我有多个键值类型的对象需要发送到RabbitMQ,因此forward将使用它们。所以,通过这个链接之后。它只告诉发布简单纯文本消息的方法。有人能告诉我如何在RabbitMQ go lang中发布和使用映射对象吗

     m := make(map[string]string)
     m["col1"] = "004999010640000"
     m["col2"] = "awadwaw"
     m["col3"] = "13"  

     err = ch.Publish(
        "EventCaptureData-Exchange", // exchange
        q.Name + "Key",          // routing key
        true,           // mandatory                            
        false,           // immediate
        amqp.Publishing{
            ContentType: "?????",
            Body:        ????,
        })

在发布Go对象之前,需要将其序列化为例如base64文本。在使用者中,然后反序列化它以返回初始对象。如需有关Go中的示例,请参阅“”


对于内容类型,我不确定什么是最合适的<代码>应用程序/八位字节流?

在发布Go对象之前,需要将其序列化为例如base64文本。在使用者中,然后反序列化它以返回初始对象。如需有关Go中的示例,请参阅“”


对于内容类型,我不确定什么是最合适的<代码>应用程序/八位字节流?

非常简单。您可以使用和包来序列化和反序列化消息。为您准备以下示例:

type Message map[string]interface{}

func serialize(msg Message) ([]byte, error) {
    var b bytes.Buffer
    encoder := json.NewEncoder(&b)
    err := encoder.Encode(msg)
    return b.Bytes(), err
}

func deserialize(b []byte) (Message, error) {
    var msg Message
    buf := bytes.NewBuffer(b)
    decoder := json.NewDecoder(buf)
    err := decoder.Decode(&msg)
    return msg, err
}

是的,基本上就是这样。库中的Body字段是字节数组,所以您只需将数据结构转换为字节数组或从字节数组转换为字节数组即可。您可以使用和包来序列化和反序列化消息。为您准备以下示例:

type Message map[string]interface{}

func serialize(msg Message) ([]byte, error) {
    var b bytes.Buffer
    encoder := json.NewEncoder(&b)
    err := encoder.Encode(msg)
    return b.Bytes(), err
}

func deserialize(b []byte) (Message, error) {
    var msg Message
    buf := bytes.NewBuffer(b)
    decoder := json.NewDecoder(buf)
    err := decoder.Decode(&msg)
    return msg, err
}

是的,基本上就是这样。库中的Body字段是字节数组,因此您只需将数据结构转换成字节数组即可。

map[string]string
是一个相当简单的数据结构,为什么不使用json呢?
map[string]string
是一个相当简单的数据结构,为什么不使用json呢?因为类型主要是字符串数据(
map[string]string
),json将比base64中的gob更紧凑。我同意,json可能是一个更好的选择,原因有很多(更容易调试,可以从另一种语言读取和解释它,等等)。我只是在这里提到base64,因为我很快就找到了一个示例。我不是Go开发人员,所以我无法准备一个基于JSON的示例。由于类型主要是字符串数据(
map[string]string
),JSON将比base64中的gob更紧凑。我同意,出于许多原因,JSON可能是一个更好的选择(更容易调试,可以从另一种语言阅读和解释,等等).我只是在这里提到base64,因为我很快找到了一个示例。我不是Go开发人员,所以我无法准备一个基于JSON的示例。非常好。这应该在文档中的某个地方说明。非常好。这应该在文档中的某个地方说明。