英文:
golang send and receive objects
问题
我能够使用以下代码在 Golang 中发送和接收字符串:
// 发送端
message.Buf.WriteTo(conn)
// 接收端
message, err := bufio.NewReader(conn).ReadString('\n')
if err != nil {
panic(err)
}
fmt.Print("来自客户端的消息:", string(message))
然而,我想要发送整个 message 对象并在接收端接收它。
类似这样:
// 发送端
message.WriteTo(conn)
// 接收端
message, err := bufio.NewReader(conn).ReadMessageObject()
我对 Golang 还很陌生,任何指导都将非常有帮助。
英文:
I am able to send and receive strings in golang using the following code:
//send side
message.Buf.WriteTo(conn)
//receive side
message, err := bufio.NewReader(conn).ReadString('\n')
if err != nil {
panic(err)
}
fmt.Print("Message from client: ", string(message))
However, I would like to send the entire message object and receive it at the receive side
Something like:
//send side
message.WriteTo(conn)
//receive side
message,err :=bufio.NewReader(conn).ReadMessageObject()
I am new to Golang and any pointers are extremely helpful.
答案1
得分: 2
你首先需要为你的消息声明一个类型。类似这样:
type Message struct {
From string
To string
Text string
CreatedAt time.Time
}
然后,你需要决定如何将你的新类型编码为字节,以及如何从字节解码,因为你只能通过字节发送数据。
你可以选择将消息以 JSON、XML 或者 gob 等形式发送。选择哪种方式取决于你的需求,json
是普遍使用且可读性较好的方式,而 gob
则更快,至少我听说是这样的,我自己还没有真正使用过 gob
。
例如,如果你选择使用 json
:
// 接收
var m Message
if _, err := json.NewDecoder(conn).Decode(&m); err != nil {
panic(err)
}
// 发送
if err := json.NewEncoder(conn).Encode(m); err != nil {
panic(err)
}
以上是代码的翻译部分。
英文:
You'll first want to declare a type for your messages. Something like:
type Message struct {
From string
To string
Text string
CreatedAt time.Time
}
Then you'll need to decide how you want your new types to be encoded to/decoded from bytes, since all you can send through the wire are bytes.
You can for example send your messages as json, as xml, or as gob, etc. Which one you choose depends on what your requirements are, json
is ubiquitous and readable but gob
on the other hand is much faster, at least that's what I heard, haven't really used gob
myself yet.
For example if you go with json
.
// receive
var m Message
if _, err := json.NewDecoder(conn).Decode(&m); err != nil {
panic(err)
}
// send
if err := json.NewEncoder(conn).Encode(m); err != nil {
panic(err)
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论