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

Integration test với testcontainers trong Go: dựng dịch vụ thật trong Docker

Mock chỉ giả lập hành vi bạn nghĩ dịch vụ có; bug thật nằm ở khác biệt với dịch vụ thật. testcontainers-go dựng database/Redis thật trong Docker ngay trong test rồi tự dọn. Đo thật: code testcontainers biên dịch sạch, và một integration test thật chống Redis (không mock) pass — kèm báo cáo trung thực về yêu cầu Docker socket.

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

Devirtualization trong Go: khi lời gọi interface biến thành một phép cộng

Nếu compiler chứng minh được kiểu động sau interface lúc biên dịch, nó thay dispatch động bằng lời gọi trực tiếp rồi inline luôn. Đo thật: một lời gọi interface co xuống còn một lệnh ADD (không itab, không CALL), nhanh hơn dispatch động ~3,8 lần. Điều kiện để nó xảy ra. Go 1.23.

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

Rate limiting bằng token bucket trong Go: giới hạn tốc độ, không phải số đồng thời

golang.org/x/time/rate dùng thuật toán token bucket để giới hạn số sự kiện mỗi giây, cho phép burst ngắn. Đo thật: 200 sự kiện ở 50/giây hội tụ chính xác 50,2/giây, burst 3 cho 3 lần đầu qua ngay, Reserve báo trước delay 0,50s. Khác semaphore thế nào. Go 1.23.

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

singleflight trong Go: gộp 100 lời gọi trùng thành 1 để chống thundering herd

Khi cache miss một key nóng, 100 request cùng lao vào gọi DB. singleflight gộp chúng thành một lời gọi thật, 99 kia chờ và dùng chung kết quả. Đo thật: 100 goroutine cùng key khiến hàm đắt chạy đúng 1 lần thay vì 100. Cơ chế, DoChan, và cạm bẫy lỗi lan. Go 1.23.

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

Fuzzing native trong Go (1.18+): để máy tự sinh input tìm bug

Test đơn vị chỉ phủ những input lập trình viên nghĩ tới. Fuzzing tự sinh hàng triệu input kỳ quái để tìm panic và ca biên — tích hợp thẳng vào go test từ Go 1.18. Đo thật: một hàm test thường XANH nhưng fuzz tìm ra input '0' làm panic trong dưới 1 giây, tự rút gọn tối giản và lưu làm hồi quy.