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.

2324 bài viết · Website
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 12 phút

Distributed lock với Redis trong Go: SET NX PX và Lua unlock an toàn

Mutex chỉ khóa trong một tiến trình. Khi nhiều máy chủ tranh một tài nguyên, cần khóa ngoài tiến trình. Bài dựng distributed lock bằng Redis trong Go: SET NX PX để lấy, Lua so sánh-rồi-xóa để trả an toàn. Đo thật: loại trừ đúng 1 người, 50 goroutine đỉnh critical section = 1, và những cái bẫy.

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

Hàng đợi lock-free Michael-Scott trong Go: mổ xẻ, và vì sao channel vẫn thắng

Xây một hàng đợi lock-free chuẩn Michael-Scott với head/tail riêng, node giả và cơ chế giúp đỡ. Đo thật: nó đúng đắn (8000 phần tử, FIFO, -race sạch) nhưng dưới tranh chấp chậm hơn channel ~3 lần. Vì sao queue khó hơn stack, và khi nào channel là câu trả lời. Go 1.23.

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

Go memory model và happens-before: vì sao data race là hành vi không xác định, không phải giá trị cũ

Go memory model định nghĩa khi nào một goroutine nhìn thấy ghi của goroutine khác qua quan hệ happens-before. Đo thật: race detector bắt 2 data race, channel sửa được, và chi phí thiết lập happens-before — mutex 1,5 ns, channel 14,5 ns. Năm quy tắc happens-before. Go 1.23.

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

go-redis pipeline: gộp nhiều lệnh Redis vào một round-trip

Gửi N lệnh Redis tuần tự là N vòng đi-về mạng — với remote Redis, gần như toàn bộ thời gian là chờ mạng chứ không phải chờ Redis. Pipeline xếp N lệnh rồi gửi hết, đọc hết trong một round-trip. Đo thật trong Go: 1000 lệnh SET tuần tự mất 1.431s, pipeline chỉ 10ms — nhanh 140 lần.