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 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.

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

Closure trong Go biểu diễn thật thế nào: khi nào miễn phí, khi nào tốn 2 cấp phát

Một func value là con trỏ tới {con trỏ mã, các biến bắt}. Đo thật: closure dùng tại chỗ 0 cấp phát dù bắt biến, nhưng bắt biến rồi trả ra tốn 24 B và 2 cấp phát; gọi qua con trỏ hàm ~2x gọi trực tiếp. Đọc assembly thanh ghi ngữ cảnh. Go 1.23.

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

Retry với exponential backoff và jitter trong Go: thử lại thông minh, tránh thundering herd

Retry lỗi tạm thời cần backoff tăng dần và jitter ngẫu nhiên để không dồn tải service vừa hồi. Đo thật trong Go 1.23: backoff nhân đôi 100ms tới trần 2s, jitter rải 10 client khắp 64-648ms thay vì cùng bật dậy một lúc, và vòng retry thành công sau 2 lỗi.