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.

2312 bài viết · Website
Lập trình Go 22/09/2026 10 phút

Memory-mapped file (mmap) trong Go: đọc tệp lớn không qua heap

os.ReadFile sao chép toàn bộ tệp vào heap Go. mmap ánh xạ tệp thẳng vào không gian địa chỉ, đọc như slice byte, để HĐH nạp trang theo nhu cầu — không copy, không heap, không áp lực GC. Đo thật trong Go: đọc tệp 200 MB, ReadFile tốn +191 MB heap và 125ms, mmap chỉ +0 MB heap và 31ms.

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

Core dump và phân tích sự cố trong Go: mổ xẻ tiến trình đã chết

Panic trace cho biết crash ở đâu nhưng mất trạng thái biến khi tiến trình chết. Core dump là ảnh chụp toàn bộ bộ nhớ lúc crash — mổ xẻ nó bằng dlv core để điều tra sau sự cố (post-mortem). Đo thật trong Go: bật GOTRACEBACK=crash sinh core dump 40 MB, dlv core dựng lại ngăn xếp tới đúng dòng gây lỗi dù tiến trình đã chết.

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

sqlc trong Go: viết SQL, sinh code Go an toàn kiểu — bắt lỗi lúc biên dịch

ORM giấu SQL và dùng reflection; database/sql viết tay linh hoạt nhưng Scan thủ công dễ sai và lỗi tên cột chỉ lộ lúc chạy. sqlc lật ngược: bạn viết SQL thật, nó sinh code Go an toàn kiểu và kiểm SQL so với schema ngay lúc sinh. Đo thật: sqlc bắt cột không tồn tại trước cả khi biên dịch Go.