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

Bounds check elimination trong Go: đo thật và vì sao chiêu reslice có thể phản tác dụng

Mỗi truy cập slice phải kiểm biên để an toàn bộ nhớ; compiler xoá check khi chứng minh được chỉ số hợp lệ. Đo thật: vòng range và i<len(xs) đã 0 check sẵn, nhưng check biên hiện đại rất rẻ (~0,05 ns) — và chiêu reslice để gợi ý BCE ở đây còn chậm hơn. Go 1.23.

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

Hexagonal (ports và adapters) trong Go: lõi ở giữa, đổi adapter không đụng lõi

Kiến trúc Hexagonal đặt lõi nghiệp vụ ở trung tâm với ports hai phía: driving (lõi cung cấp) và driven (lõi cần). Đo thật trong Go 1.23: đổi adapter gửi thông báo từ email sang SMS mà lõi không đổi một dòng, lõi cô lập hoàn toàn, và test lõi bằng spy không cần I/O thật.

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

govulncheck trong Go: quét lỗ hổng theo cái code thực sự gọi tới

Scanner thường báo động mọi phụ thuộc dính CVE dù code không dùng hàm lỗi — ngập trong cảnh báo giả. govulncheck phân tích call graph, chỉ báo lỗ hổng code thực sự gọi tới, kèm đường dẫn gọi chính xác. Đo thật: 3 lỗ hổng yaml.v2 code gọi tới (kèm trace + phiên bản vá) so với 42 chỉ-có-không-gọi.

Hệ thống 22/09/2026 6 phút

strace -c và -T: tìm chính xác syscall nào khiến chương trình chậm

"App chậm mà không biết chậm ở đâu" — strace -c cho bảng tóm tắt: syscall nào chiếm bao nhiêu phần trăm thời gian và gọi bao nhiêu lần. Bài này đo thật: một chương trình ghi 20000 lần 1 byte cho thấy write chiếm 98% thời gian với 20000 lần gọi; gom lại còn 1 lần. Cùng -T đo thời gian từng syscall để soi cái chậm bất thường.