Q

Quản trị viên

Là một lập trình viên yêu công nghệ, thích viết blog để chia sẻ kiến thức, kinh nghiệm lập trình và những điều thú vị trong thế giới tech.

2312 bài viết · Website
Lập trình Go 22/09/2026 10 phút

Tổng kết Go chuyên sâu: bản đồ 132 bài và hai con số gói lại cả sê-ri

Kết thúc 132 bài đo thật về runtime, hiệu năng và hệ thống Go. Bài này vẽ bản đồ toàn sê-ri theo tám chủ đề, và đo một benchmark tổng hợp gói lại hai bài học lớn nhất: stack nhanh hơn heap 14,5 lần với 0 cấp phát, và thêm core giúp thật nhưng dưới tuyến tính (10 core chỉ nhanh 4,6x). Cùng cách tư duy đọng lại sau tất cả.

Cơ sở dữ liệu 22/09/2026 7 phút

Nạp dữ liệu lớn vào PostgreSQL: vì sao bỏ index rồi tạo lại nhanh gần gấp đôi

Mỗi index phải cập nhật theo từng dòng chèn, nên nạp khối lượng lớn vào bảng đã đầy index rất chậm. Đo thật: nạp 3 triệu dòng với 4 index sẵn mất 12,6 giây; bỏ index thứ cấp rồi tạo lại sau khi nạp chỉ 7 giây và bảng còn nhỏ hơn. Và một điểm bất ngờ về maintenance_work_mem. PostgreSQL 16.

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

Kim tự tháp kiểm thử đo thật: cấy 8 lỗi vào một dịch vụ Go — unit bắt 2, integration bắt 4, end-to-end bắt cả 8, nhưng một test chạm PostgreSQL đắt gấp 184 lần unit và lỗi end-to-end chỉ nói triệu chứng

Mở sê-ri kiểm thử backend bằng số thay vì hình vẽ. Một gói Go nhỏ với logic tính giá, repo PostgreSQL và handler HTTP, ba tầng test tách bằng build tag, tám lỗi cấy vào từng cái một. Unit bắt 2/8, integration 4/8, end-to-end 8/8. Giá đo bằng go test -count=100: unit 12,5 µs một test, integration 2,3 ms, end-to-end trong tiến trình 2,25 ms, tức bước nhảy 184 lần nằm ở chỗ chạm cơ sở dữ liệu chứ không ở HTTP. Cùng một lỗi làm tròn, unit nói đúng hàm và đầu vào, end-to-end chỉ nói tổng sai 1 xu; lỗi quên cột NOT NULL làm cả 5 test end-to-end đỏ mà không dòng nào nói vì sao.

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.