title: Go binary encoding variant vs fixed slice length
body: <p>I need to encode integer keys as byte slices for a KV database.
  I want to make the encoding smaller and cut the zero padding.
  I thought the variant encoding from the binary package would be the way to go.</p>
  
  <p>But in both cases, variant and fixed, the byte slice length is the same.
  Just different bits arrangement since first bit is used as a flag.
  I assumed the variant encoding would cut the "extra fat". No.</p>
  
  <pre><code>package main
  
  import (
      "encoding/binary"
      "fmt"
  )
  
  func main() {
  
      x := 16
      y := 106547
  
      fmt.Println(x)
      fmt.Println(y)
  
      // Variant
      bvx := make([]byte, 8)
      bvy := make([]byte, 8)
  
      xbts := binary.PutUvarint(bvx, uint64(x))
      ybts := binary.PutUvarint(bvy, uint64(y))
  
      fmt.Println("Variant bytes written x: ", xbts)
      fmt.Println("Variant bytes written y: ", ybts)
  
      fmt.Println(bvx)
      fmt.Println(bvy)
  
      fmt.Println("bvx length: ", len(bvx))
      fmt.Println("bvy length: ", len(bvy))
  
      // Fixed
      bfx := make([]byte, 8)
      bfy := make([]byte, 8)
  
      binary.LittleEndian.PutUint64(bfx, uint64(x))
      binary.LittleEndian.PutUint64(bfy, uint64(y))
  
      fmt.Println(bfx)
      fmt.Println(bfy)
  
      fmt.Println("bfx length: ", len(bfx))
      fmt.Println("bfy length: ", len(bfy))
  
  }
  </code></pre>
  
  <p>My question is. Do I have to splice the byte slice manually with variant encoding to get rid of the extra bytes?
  Since put <code>PutUvariant</code> returns the number of bytes written, I can just splice the byte slice.</p>
  
  <p>Is this the right way to do it?
  If not, what is the correct way to make the slices smaller?</p>
  
  <p>Thanks</p>