So this took me a lot longer than it should have. GoLang Vmihailenco's library is my favorite at the moment for GoLang. It's one line to encode and one line to decode. I simply create a struct to get the packet's Id and then a struct for the input. I'm just doing this to prepare for any other data coming into the server. //GetPacketID Get's the packet id from a packet type GetPacketID struct { ID int } //InputPacket Get's input data from packet type InputPacket struct { ID int X int Y int entity *Entity } This now allows me to marshal data like this: n, addr, err := conn.ReadFromUDP(buf) CheckError(err) //deseralize var pID GetPacketID err = msgpack.Unmarshal(buf[:n], &pID) and unmarshal it like this: var statePacket StatePacket b, err := msgpack.Marshal(statePacket) CheckError(err) You can probably see why I like this library so much. One line serialization a