公式文書によると、uint64 は 64 ビットの符号なし整数です。それは、uint64 の数値がどれほど小さくても大きくても、8 バイトのストレージを使用する必要があることを意味しますか?
編集:
みんなの答えをありがとう!
binary.PutUvarint
が大きな を格納するために最大 10 バイトを消費することに気付いたときuint64
、最大uint64
で 8 バイトしかとらないはずなのに、疑問を投げかけました。
次に、Golang lib のソース コードで私の疑問に対する答えを見つけました。
Design note:
// At most 10 bytes are needed for 64-bit values. The encoding could
// be more dense: a full 64-bit value needs an extra byte just to hold bit 63.
// Instead, the msb of the previous byte could be used to hold bit 63 since we
// know there can't be more than 64 bits. This is a trivial improvement and
// would reduce the maximum encoding length to 9 bytes. However, it breaks the
// invariant that the msb is always the "continuation bit" and thus makes the
// format incompatible with a varint encoding for larger numbers (say 128-bit).