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

Repository pattern trong Go: tách tầng dữ liệu bằng interface, và khi nào nó thành lớp thừa

Repository pattern giấu chi tiết lưu trữ sau một interface, để logic nghiệp vụ không phụ thuộc CSDL cụ thể. Đo thật trong Go 1.23: repo dịch lỗi lưu trữ thành lỗi domain để errors.Is dùng ở tầng trên, service test được bằng fake, và nêu thẳng chỗ repository giấu mất tối ưu CSDL.

Lập trình Go 22/09/2026 9 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.

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

Viết hàm assembly Plan 9 trong Go: chạy được, nhưng vì sao thường lỗ

Hướng dẫn viết một hàm assembly từ đầu: khai báo Go không thân, cài đặt trong file .s, đọc tham số qua FP. Chạy thật cho kết quả đúng. Nhưng đo trung thực cho thấy hàm asm không inline được, nên với hàm nhỏ thường lỗ — nó chỉ đáng cho thứ compiler không diễn đạt được. Go 1.23.

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

Functional options nâng cao trong Go: closure làm cấu hình, tự validate, tương thích ngược

Functional options dùng closure làm tham số cấu hình, cho API mở rộng mà vẫn tương thích ngược. Đo thật trong Go 1.23: option tự validate và gộp lỗi tại constructor, chậm hơn config struct khoảng 6ns nhưng cùng một cấp phát, và closure không thoát heap khi dùng trực tiếp.

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.