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 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 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 10 phút

Semaphore có trọng số trong Go: giới hạn tài nguyên khi mỗi việc tốn khác nhau

golang.org/x/sync/semaphore cho phép mỗi lần Acquire tốn số đơn vị khác nhau — điều channel làm semaphore không diễn đạt được. Đo thật: 12 việc trọng số 1/3/5 với sức chứa 10 giữ đúng giới hạn, và Acquire nhanh hơn channel-semaphore ~2 lần. Khi nào cần. 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.

Cơ sở dữ liệu 22/09/2026 6 phút

Hàm bọc quanh cột làm mất index trong PostgreSQL: lower(), date() và cách gỡ

Index lưu giá trị cột, không lưu giá trị của hàm. Bọc lower(email) hay date(tao_luc) quanh cột trong WHERE khiến index thành vô dụng. Đo thật: lower(email) chạy Seq Scan 160 ms so với 0,036 ms; date(tao_luc) 47,6 ms so với 0,433 ms khi viết lại thành khoảng. Index biểu thức và điều kiện sargable. PostgreSQL 16.