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

Cạm bẫy microbenchmark trong Go: trình biên dịch có thể xóa code bạn đo

Trình biên dịch Go tối ưu mạnh: kết quả không dùng bị loại, input hằng số bị tính sẵn — benchmark đo cái không còn chạy, cho số nhỏ hơn thực tế. Đo thật: cùng một hàm, benchmark sai báo 5.5 ns còn benchmark đúng (sink + input biến thiên) báo 9.35 ns — thiếu 41%. Và dấu hiệu nhận biết code bị xóa.

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

Gỡ lỗi từ xa với Delve trong Go: gắn debugger vào tiến trình đang chạy

Log chỉ cho biết cái bạn nghĩ để in; có bug cần xem trạng thái đầy đủ tại một điểm — mọi biến, stack, bước từng dòng. Delve là debugger cho Go, và chế độ headless cho phép server chạy cạnh tiến trình (kể cả trong container) còn client kết nối qua mạng. Đo thật: breakpoint, xem biến cục bộ và từ xa qua :2345.

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

Connection pool tự viết trong Go: tái dùng tài nguyên tốn kém bằng buffered channel

Connection pool giữ sẵn các kết nối và tái dùng thay vì mở/đóng liên tục. Đo thật trong Go 1.23: một pool dựng bằng buffered channel tái dùng 3 kết nối cho 10 lần dùng, có timeout khi cạn, và nhanh hơn tạo mới mỗi lần hàng nghìn lần khi kết nối tốn 5ms bắt tay.

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

Nén trong Go: compress/gzip, chọn mức, và nén luồng không nạp hết vào RAM

Go có nén tích hợp trong thư viện chuẩn: compress/gzip, flate, zlib. Bài này đo thật: gzip BestSpeed nén 10MB trong 19ms, BestCompression trong 437ms (nhỏ hơn chưa tới 0.5%). Và cách nén theo luồng bằng io.Copy qua gzip.Writer để nén file 10GB với bộ nhớ vài chục KB. Kèm cái bẫy quên Close() làm hỏng dữ liệu, và cách tái dùng Writer bằng sync.Pool.

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

Tiny allocator của Go: gộp object nhỏ để một byte chỉ tốn một byte

Object tí hon rất phổ biến nhưng cấp mỗi cái một slot 8-16 byte quá phí. Tiny allocator gộp object dưới 16 byte không con trỏ vào chung khối 16B. Đo thật: object 1-byte nén xuống đúng 1.0 B mỗi cái (thắng 8 lần), nhưng cùng cỡ mà có con trỏ thì không được gộp. Go 1.23.

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

Prepared statement caching trong Go: chuẩn bị một lần, chạy nhiều lần

Một câu lệnh có tham số đi qua hai pha ở DB: PREPARE (phân tích + lập kế hoạch, đắt) và EXECUTE (rẻ). Chạy cùng câu lệnh N lần mà prepare lại mỗi lần là lãng phí. Đo thật trong Go: 500 truy vấn với prepare mỗi lần mất 1.98s (500 prepare), prepare một lần rồi tái dùng chỉ 673ms (1 prepare) — nhanh 2.9 lần.