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

Đọc panic trace và runtime.Stack trong Go: mổ xẻ từng dòng để chẩn đoán crash

Panic trace không phải chữ đỏ đáng sợ mà là bản đồ đầy đủ để tìm bug. Bài này mổ xẻ từng phần: số hiệu goroutine, trạng thái [running]/[chan receive]/[sync.Mutex.Lock], ngăn xếp đọc từ đâu, tham số hex, tín hiệu SIGSEGV — và dùng runtime.Stack chụp mọi goroutine. Đo thật trong Go 1.23.

Lập trình Go 22/09/2026 9 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 11 phút

False sharing trong Go: hai biến không liên quan mà làm chậm nhau 30 lần

Tám goroutine tăng tám counter riêng, không chia sẻ dữ liệu — nhưng chậm 30 lần vì chúng nằm chung một cache line. Đo thật: 830 ms so với 27.5 ms sau khi chèn đệm để mỗi counter chiếm một cache line 64 byte. Cơ chế cache coherency và khi nào cần thêm padding. Go 1.23.

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

Mocking với gomock và mockgen trong Go: sinh mock tự động từ interface

Mock cô lập đơn vị khỏi phụ thuộc: một cài đặt giả của interface mà bạn khai hành vi mong đợi. gomock còn verify — đúng lời gọi, đúng đối số, đúng số lần. Đo thật: mockgen sinh mock từ interface, 3 test qua mock pass, và gomock bắt lời gọi sai đối số (kỳ vọng 200 mà code gọi 100).

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

Big-O không phải lý thuyết suông: đo thật để thấy nó hiện ra

Ai cũng học Big-O rồi quên, vì nó nghe như toán hàn lâm. Nhưng Big-O là thứ ĐO được. Bài này chạy thật trong go-lab: khi N tăng gấp đôi, O(n) ×2, O(n²) ×4, còn O(log n) gần như đứng yên. Chính tỉ lệ 'nhân đôi N' đó là cách nhận ra độ phức tạp của code bạn — và lý do một hàm O(n²) chạy ngon lúc dev lại làm sập hệ thống lúc scale.