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

Map evacuation trong Go: mở rộng map mà không gây khựng, đo tận nanosecond

Khi map quá đầy, số bucket phải gấp đôi và mọi entry phải chuyển chỗ. Làm một lần sẽ khựng O(n). Đo thật: chèn 2 triệu entry, insert chậm nhất chỉ 0.6 ms — nhỏ hơn 330 lần so với 200 ms nếu chuyển hết một lần. Cơ chế evacuation tăng dần và load factor 6.5. Go 1.23.

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

Chiến lược tăng trưởng slice trong Go: nhân đôi rồi giảm dần về 1.25x

Khi append vượt cap, Go cấp mảng nền mới lớn hơn — nhưng nhân theo hệ số nào? Đo thật tiến trình cap: slice nhỏ nhân đôi (x2.00 tới cap 512), rồi giảm dần về ~1.25x cho slice lớn (1.66 1.51 1.40 1.33). Vì sao đổi hệ số và tại sao prealloc vẫn thắng. Go 1.23.

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

Viết hàm assembly Plan 9 trong Go: chạy được, nhưng vì sao thường lỗ

Hướng dẫn viết một hàm assembly từ đầu: khai báo Go không thân, cài đặt trong file .s, đọc tham số qua FP. Chạy thật cho kết quả đúng. Nhưng đo trung thực cho thấy hàm asm không inline được, nên với hàm nhỏ thường lỗ — nó chỉ đáng cho thứ compiler không diễn đạt được. Go 1.23.

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

Compiler directive //go: trong Go: từ embed tiện lợi đến linkname nguy hiểm

Chú thích //go: là công tắc điều khiển compiler và linker. Đo thật: go:embed nhúng file vào binary lúc build, go:linkname gọi được hàm runtime riêng (runtime.nanotime), và một khoảng trắng thừa sau // khiến directive bị bỏ qua âm thầm. Cái nào an toàn, cái nào phá an toàn bộ nhớ. Go 1.23.