Мне нужно закодировать целочисленные ключи как байтовые фрагменты для базы данных KV.Я хочу сделать кодировку меньше и сократить заполнение нулями.Я думал, что вариант кодирования из бинарного пакета будет путь.
Но в обоих случаях, вариант и фиксированный, длина среза байта одинакова.Просто разное расположение битов, так как первый бит используется как флаг.Я предполагал, что вариант кодирования уменьшит «лишний жир».Нет.
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))
}
У меня вопрос.Нужно ли вручную сращивать срез байтов с помощью варианта кодирования, чтобы избавиться от лишних байтов?Так как put PutUvariant
возвращает количество записанных байтов, я могу просто соединить фрагмент байта.
Это правильный способ сделать это?Если нет, то как правильно уменьшить ломтики?
Спасибо