title: Efficient binary encoding of struct
body: <p>I have a program that sends udp packets.
  a packet datagram is represented by the following struct (notice that the size of the packet isn't fixed):</p>
  
  <pre><code>type packet struct {
      dataLength uint16
      id [8]byte
      pairity, shards, flags byte
      blob []byte // length defined by dataLength 
  }
  </code></pre>
  
  <p>I used encoding/binary package to do serialization/deserialization but it wasn't efficient enough (used pprof). it wasted alot of CPU time and I couldn't utilize the whole network speed because of that.</p>
  
  <p>for example, consider the following code:</p>
  
  <pre><code>packet := packet{
      dataLength: 4,
      id: [8]byte{1,2,3,4,5,6,7,8},
      pairity: 10,
      shards: 50,
      flags: 200,
      blob: []byte{1,2,3,4},
  }
  bufToSendOverNetwork := packet.ToBytes()
  </code></pre>
  
  <p>What is the most efficient way to do this operation (and also the <code>.FromBytes</code> operation)</p>