Lập trình Go 22/09/2026 11 phút

Encoding nhị phân tùy biến trong Go: nhỏ hơn và nhanh hơn JSON

JSON là văn bản tự mô tả — lặp tên field, số là chuỗi ASCII, phải phân tích cú pháp khi đọc. Với dữ liệu nội bộ nóng, một định dạng nhị phân tùy biến gọn và nhanh hơn nhiều. Đo thật trong Go: 100k bản ghi, binary nhỏ hơn 2.3 lần, mã hóa nhanh 4 lần, giải mã nhanh 9 lần — cùng đánh đổi và rủi ro.

Lập trình 22/09/2026 6 phút

encoding/gob: định dạng nhị phân của riêng Go, và cái bẫy khi chỉ gửi một giá trị

gob là serialization gọn của Go — tự mô tả kiểu nên không cần schema ngoài như Protobuf. Nhưng nó có một đặc tính dễ gây bất ngờ: gửi một giá trị lẻ thì gob còn LỚN hơn JSON vì gói kèm mô tả kiểu. Bài này đo thật: 1 giá trị gob 443 byte vs JSON 398, nhưng stream 1000 giá trị thì gob chỉ 215 byte/giá trị (~nửa JSON); và Encoder tái dùng mã hóa chỉ 1 lần cấp phát, nhanh hơn JSON.

Lập trình 22/09/2026 6 phút

MessagePack: JSON nhị phân — nhưng đo thật cho thấy nó không nhỏ như bạn tưởng

MessagePack được quảng cáo là JSON nhị phân gọn hơn. Đúng, nhưng đo thật cho con số khiêm tốn hơn kỳ vọng: cùng một đơn hàng, MessagePack mặc định chỉ nhỏ hơn JSON 1,08 lần, bật compact ints được 1,25 lần — còn xa Protobuf (~2 lần). Lý do lộ ra khi nhìn byte: MessagePack vẫn lưu tên field trong map. Điểm mạnh thật của nó là giải mã nhanh ~2,4 lần JSON và đổi đúng một dòng code.

Lập trình 22/09/2026 6 phút

CBOR: người anh em chuẩn hóa của MessagePack, và vì sao IETF cần thêm một định dạng

CBOR (RFC 8949) gần như MessagePack: nhị phân, tự mô tả, cùng ý tưởng byte format. Vậy sao IETF lại chuẩn hóa thêm một định dạng? Bài này đo thật: cùng đơn hàng, CBOR 339 byte nhỏ hơn cả MessagePack 392 và JSON 440, mã hóa nhanh nhất trong ba. Nhưng khác biệt lớn nhất là CBOR có tag ngữ nghĩa và là chuẩn IETF — nền tảng của WebAuthn, COSE, CWT, IoT.