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

Event sourcing trong Go: lưu chuỗi sự kiện thay vì trạng thái, và snapshot cứu tốc độ

Event sourcing lưu chuỗi sự kiện bất biến thay vì trạng thái hiện tại; trạng thái được dựng lại bằng replay. Đo thật trong Go 1.23: dựng lại số dư tài khoản từ chuỗi sự kiện, truy vết lịch sử tại mọi thời điểm, và snapshot làm việc dựng lại nhanh hơn replay đầy đủ khoảng 1443 lần.

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

Giảm áp lực GC thực chiến: gộp mọi kỹ thuật, cắt GC 4 lần

Giảm áp lực GC không phải một mẹo mà là gộp nhiều kỹ thuật. Đo thật cùng tác vụ: tái dùng strings.Builder + Grow prealloc + tránh fmt.Sprintf boxing cắt cấp phát từ 2756 xuống 901 alloc mỗi lần, làm GC chạy 511 thay vì 2068 lần và nhanh 4.2 lần. Quy trình thực chiến đo-tìm-sửa-đo lại. Go 1.23.

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

HTTP/2 multiplexing trong Go: nhiều request song song trên một kết nối, xóa head-of-line blocking

HTTP/2 chia mỗi request thành một stream độc lập chạy song song trên cùng một kết nối TCP, xóa head-of-line blocking của HTTP/1.1. Đo thật trong Go 1.23: 20 request trên một kết nối xong 54ms với HTTP/2 so với 1,136 giây với HTTP/1.1 — nhanh hơn 21 lần.

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

go.work trong Go: làm việc nhiều module cùng lúc mà không cần replace thủ công

go.work cho phép làm việc với nhiều module local đồng thời trong một workspace, thay cho replace thủ công dễ commit nhầm. Đo thật trong Go 1.23: không go.work thì build lỗi package không tìm thấy, có go.work thì dùng lib local ngay, và go.mod vẫn sạch không một dòng replace.

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

Hàng đợi chạy cục bộ và toàn cục trong Go: vì sao mỗi P có queue riêng 256 slot

Bộ lập lịch Go không dùng một hàng đợi chung. Mỗi P giữ hàng đợi cục bộ lock-free tối đa 256 goroutine, cộng một hàng đợi toàn cục có khoá cho phần tràn. Đo thật bằng schedtrace: local queue không bao giờ vượt 256, global phình tới hàng vạn nhưng không bị bỏ đói. Go 1.23.