Từ Go 1.22, thư viện chuẩn cung cấp hỗ trợ routing tốt hơn
- Trước đây phải xử lý routing thủ công, nhưng giờ có thể routing đơn giản bằng
mux.HandleFunc
- Có thể tăng cường bảo mật bằng cách thêm middleware đăng nhập
Lưu ý với router tích hợp sẵn: chuyển hướng do dấu gạch chéo ở cuối
- Nếu tạo đường dẫn
/records/, yêu cầu tới /records sẽ bị chuyển hướng sang /records/
- Vì vậy, phần thân của yêu cầu POST có thể bị loại bỏ và bị đổi thành yêu cầu GET
- Cách khắc phục là dùng endpoint API như
POST /records thay vì POST /records/
Tự động sinh mã truy vấn cơ sở dữ liệu bằng sqlc
- Tác giả phát hiện ra công cụ sqlc, cho phép viết truy vấn SQL mà không cần học ORM
- Khi viết truy vấn SQL, công cụ sẽ tự động chuyển thành mã Go
- Có thể dễ dàng viết các truy vấn SQL cần thiết mà không cần tham khảo tài liệu của ORM
Mẹo tối ưu sqlite
- Dùng một đối tượng chỉ dành cho ghi vào cơ sở dữ liệu và thiết lập
db.SetMaxOpenConns(1)
- Để tăng tốc độ đọc, hãy dùng các đối tượng DB riêng cho ghi và đọc
- Hai bảng không cần JOIN có thể được đặt trong các cơ sở dữ liệu riêng để kết nối độc lập
Thiết lập giới hạn bộ nhớ GC trong Go 1.19
- Khi chạy mọi dự án Go trên các VM có bộ nhớ tương đối thấp như 256MB hoặc 512MB, ứng dụng liên tục bị dừng do OOM
- Do cấu hình mặc định của garbage collector, hệ thống cho phép cấp phát bộ nhớ tới gấp 2 lần kích thước heap hiện tại
- Trong Go 1.19, đã bổ sung cách để chỉ thị ứng dụng chạy GC khi đạt tới một mức sử dụng bộ nhớ nhất định
- Sau khi đặt giới hạn bộ nhớ GC là 250MB, tần suất bị dừng do OOM đã giảm
export GOMEMLIMIT=250MiB
Vì sao xây dựng website bằng Go
- Triển khai rất thuận tiện nhờ một static binary duy nhất
- Có web server tích hợp sẵn đủ dùng cho production, nên không cần cấu hình WSGI hay tương tự
- Toolchain của Go dễ cài đặt và sử dụng
- Việc gửi phản hồi HTTP rất đơn giản nên dự án dễ bảo trì
- Thư viện chuẩn có
net/http, nên có thể làm website mà không cần cài thêm thư viện
- Cũng có thể dễ dàng thực hiện các tác vụ ở mức hệ thống
- Mọi thứ dường như đều được thiết kế để giúp dự án dễ quản lý hơn
Những vấn đề vẫn chưa giải quyết được
- Vẫn còn nhiều thứ tác giả chưa làm nhiều trong Go
- Render HTML template
- Triển khai hệ thống đăng nhập thực tế
- Triển khai CSRF
- Nói chung, vì chưa rõ cách triển khai các tính năng nhạy cảm về bảo mật, nên tác giả không bắt đầu các dự án cần đăng nhập/CSRF
Thật thú vị khi thấy các tính năng mới của Go
- Hai tính năng Go được nhắc tới trong bài này (
GOMEMLIMIT và routing) đều là những bổ sung mới trong vài năm gần đây
- Có lẽ nên chú ý hơn tới release note của các phiên bản Go mới
2 bình luận
sqlc thực sự rất tuyệt
Ý kiến trên Hacker News
embedContextvào vòng lặp transaction để có thể hủysqlccó một số hạn chế lớn và vài bất tiện nhỏ, nên kiểm tra danh sách issue trước khi dùngGOMAXPROCSphù hợp để tránh CPU throttlingGOMEMLIMITcó thể giúp bớt phải lo về GChtml/templatekhá kỳ quặc và có nhiều vấn đề, nên tốt hơn là đừng dùngTemplmuxtừ lâu, nhưng chưa để ý đến các tính năng trong bản phát hành mớinilkhiến cả những việc đơn giản cũng trở nên phức tạpBEGIN CONCURRENT