Sejak Go 1.22, pustaka standar menyediakan dukungan routing yang lebih baik
- Sebelumnya routing ditangani secara manual, tetapi sekarang routing bisa dilakukan dengan sederhana menggunakan
mux.HandleFunc
- Keamanan dapat diperkuat dengan menambahkan middleware login
Hal yang perlu diperhatikan pada router bawaan: pengalihan karena trailing slash
- Jika membuat path
/records/, permintaan ke /records akan dialihkan ke /records/
- Akibatnya, body permintaan POST bisa hilang dan berubah menjadi permintaan GET
- Solusinya adalah menggunakan endpoint API seperti
POST /records, bukan POST /records/
Membuat kode kueri database secara otomatis dengan sqlc
- Menemukan alat sqlc yang memungkinkan penulisan kueri SQL tanpa perlu mempelajari ORM
- Jika menulis kueri SQL, kueri tersebut akan otomatis diubah menjadi kode Go
- Kueri SQL yang dibutuhkan dapat ditulis dengan mudah tanpa harus merujuk dokumentasi ORM
Tips optimasi sqlite
- Gunakan objek khusus tulis untuk database dan atur
db.SetMaxOpenConns(1)
- Untuk meningkatkan kecepatan baca, gunakan objek DB terpisah untuk tulis dan baca
- Dua tabel yang tidak memerlukan JOIN dapat ditempatkan di database terpisah agar bisa terhubung secara independen
Mengatur batas memori GC di Go 1.19
- Saat menjalankan semua proyek Go di VM dengan memori yang relatif kecil seperti 256MB atau 512MB, muncul masalah aplikasi terus berhenti karena OOM
- Karena pengaturan default garbage collector, alokasi memori diizinkan hingga dua kali ukuran heap saat ini
- Di Go 1.19 ditambahkan cara untuk menginstruksikan aplikasi menjalankan GC saat mencapai penggunaan memori tertentu
- Setelah menetapkan batas memori GC ke 250MB, frekuensi penghentian karena OOM berkurang
export GOMEMLIMIT=250MiB
Alasan membuat situs web dengan Go
- Mudah dideploy sebagai satu binary statis
- Ada web server bawaan yang siap dipakai di production, sehingga tidak perlu menyiapkan WSGI dan sejenisnya
- Toolchain Go mudah dipasang dan digunakan
- Mengirim respons HTTP itu sederhana sehingga proyek lebih mudah dirawat
- Karena
net/http sudah termasuk dalam pustaka standar, situs web dapat dibuat tanpa memasang pustaka tambahan
- Tugas tingkat sistem juga mudah dilakukan
- Rasanya semua dirancang agar proyek mudah ditangani
Masalah yang masih belum terselesaikan
- Hal-hal yang belum banyak dicoba di Go
- Merender template HTML
- Mengimplementasikan sistem login yang sesungguhnya
- Mengimplementasikan CSRF
- Secara umum, karena belum benar-benar paham cara mengimplementasikan fitur yang sensitif terhadap keamanan, proyek yang memerlukan login/CSRF dan sejenisnya belum dimulai
Menarik melihat fitur-fitur baru Go
- Dua fitur Go yang disebut dalam tulisan ini (
GOMEMLIMIT dan routing) adalah tambahan baru dalam beberapa tahun terakhir
- Sepertinya perlu memberi perhatian lebih pada catatan rilis versi Go yang baru
2 komentar
sqlc benar-benar bagus
Komentar Hacker News
embedtidak disebutkan dalam tulisan tentang pengembangan web GoContextke loop transaksi agar bisa dibatalkansqlcmemiliki beberapa keterbatasan utama dan ketidaknyamanan kecil, jadi sebaiknya periksa daftar issue sebelum menggunakannyaGOMAXPROCSdengan tepat untuk menghindari CPU throttlingGOMEMLIMITdapat mengurangi kekhawatiran soal GChtml/templateterasa aneh dan punya banyak masalah, jadi sebaiknya jangan digunakanTemplmux, tetapi tidak memperhatikan fitur rilis yang barunilmembuat pekerjaan sederhana pun menjadi rumitBEGIN CONCURRENT