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('
')
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.
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)
}