You are missing that it is encoding. Specifically, using VarInt is asking for Variable integer encoding: https://developers.google.com/protocol-buffers/docs/encoding#varints
The important bit here is that the Varint stores 7-bits of data and 1-bit of metadata in each byte (the metadata being whether there are more bits). Have a look at the value you stored, 1488220019858895600. In binary, that is 1 0100 1010 0111 0011 1000 0011 1001 0001 1111 0101 0000 0111 0010 1111 0000, which takes 61 bits. Using 7 bits per byte, this takes 8.7.... bytes to store, in other words, long enough that it takes 9 bytes because the encoding does not use partial by -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.