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.

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

Clean Architecture trong Go: hướng phụ thuộc mà compiler tự ép

Clean Architecture đặt logic nghiệp vụ ở trung tâm, mọi phụ thuộc chỉ trỏ vào trong. Đo thật trong Go 1.23: domain định nghĩa interface (port), infra hiện thực, và lệnh cấm import cycle của Go biến quy tắc kiến trúc thành lỗi biên dịch — bạn không thể làm domain phụ thuộc hạ tầng.

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 9 phút

WebSocket server thật trong Go: nâng cấp từ HTTP, giao tiếp hai chiều bền vững

WebSocket nâng cấp một kết nối HTTP thành kênh hai chiều mở liên tục cho chat, thông báo đẩy, dữ liệu real-time. Đo thật trong Go 1.23: bắt tay 101 Switching Protocols, gửi/nhận trên một kết nối bền, và một message qua WebSocket nhanh hơn HTTP polling khoảng 23 lần.

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.