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

Cạm bẫy microbenchmark trong Go: trình biên dịch có thể xóa code bạn đo

Trình biên dịch Go tối ưu mạnh: kết quả không dùng bị loại, input hằng số bị tính sẵn — benchmark đo cái không còn chạy, cho số nhỏ hơn thực tế. Đo thật: cùng một hàm, benchmark sai báo 5.5 ns còn benchmark đúng (sink + input biến thiên) báo 9.35 ns — thiếu 41%. Và dấu hiệu nhận biết code bị xóa.

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

Coverage nâng cao trong Go: đo phủ theo hàm, và vì sao 100% không đủ

go test -cover cho một con số tổng, nhưng không nói phần nào chưa phủ. go tool cover -func chỉ ra chính xác hàm/nhánh nào yếu để thêm test. Và cạm bẫy lớn nhất: 100% phủ dòng không bằng test tốt. Đo thật: coverage 75% lên 87.5% có mục tiêu, và một test 100% phủ dòng vẫn để lọt bug giá âm -500.

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

staticcheck và golangci-lint trong Go: bắt lỗi go build bỏ qua

go build chỉ bắt lỗi cú pháp và kiểu; nhiều lỗi tinh vi (so sánh thừa, dead store, dùng API sai) lọt qua. staticcheck là bộ linter chất lượng cao, golangci-lint gom nhiều linter vào một. Đo thật: cùng một file, go build sạch, staticcheck bắt 3 lỗi, golangci-lint bắt 4 — thêm cả dead store staticcheck bỏ sót.