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

GC tricolor mark-sweep của Go: gom rác mà chỉ dừng chương trình 62 micro-giây

Bộ thu gom rác của Go chạy đồng thời với chương trình, dùng ba màu để đánh dấu object sống. Đo thật: 10 chu kỳ GC chỉ dừng chương trình tổng 0.62 ms (62 micro-giây mỗi lần), trong khi công việc nền chạy 111 triệu lần. Cơ chế tricolor và write barrier. Go 1.23.

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

Compiler directive //go: trong Go: từ embed tiện lợi đến linkname nguy hiểm

Chú thích //go: là công tắc điều khiển compiler và linker. Đo thật: go:embed nhúng file vào binary lúc build, go:linkname gọi được hàm runtime riêng (runtime.nanotime), và một khoảng trắng thừa sau // khiến directive bị bỏ qua âm thầm. Cái nào an toàn, cái nào phá an toàn bộ nhớ. 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ông cụ 22/09/2026 6 phút

sed thực chiến: thay thế, địa chỉ, nhóm bắt — và bẫy sed -i giết script khi đổi máy

sed là con dao đa năng để biến đổi văn bản theo dòng, nhưng cú pháp cô đọng khiến nhiều người chỉ dùng mỗi s/a/b/. Bài này chạy sed thật: cờ g/N/I, chọn dòng theo địa chỉ và mẫu, xoá dòng, nhóm bắt \1 \2, in chọn lọc thay grep — và cái bẫy sed -i khác nhau giữa Linux (GNU) và macOS (BSD) khiến script hỏng khi chuyển máy.