24 poin oleh GN⁺ 2024-09-30 | 2 komentar | Bagikan ke WhatsApp

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

 
secret3056 2024-09-30

sqlc benar-benar bagus

 
GN⁺ 2024-09-30
Komentar Hacker News
  • Bahasa Go memungkinkan Anda mengerjakan proyek selama 5 hari lalu menelantarkannya selama 2 tahun, dan tetap bisa kembali menulis kode tanpa masalah
  • Saya mulai mempelajari bahasa Go beberapa tahun lalu, tetapi karena tidak banyak berubah, bahasa ini tetap berguna bahkan setelah waktu yang lama
  • Sangat disayangkan paket embed tidak disebutkan dalam tulisan tentang pengembangan web Go
    • Sangat praktis untuk membundel resource statis ke dalam satu biner
  • Transaksi database memang dirancang untuk gagal, jadi sebaiknya selalu gunakan loop retry
    • Sebaiknya tambahkan Context ke loop transaksi agar bisa dibatalkan
  • sqlc memiliki beberapa keterbatasan utama dan ketidaknyamanan kecil, jadi sebaiknya periksa daftar issue sebelum menggunakannya
    • Tidak mendukung query dinamis, relasi satu-ke-banyak, embedded CTE, tipe komposit, dan sebagainya
    • Cocok untuk kebutuhan sederhana, tetapi untuk pekerjaan yang kompleks sebaiknya gunakan pendekatan manual
  • Saat menjalankan Go di dalam container, Anda harus mengatur GOMAXPROCS dengan tepat untuk menghindari CPU throttling
  • Menggunakan GOMEMLIMIT dapat mengurangi kekhawatiran soal GC
    • Bisa diatur otomatis saat menggunakan Kubernetes atau Docker
  • html/template terasa aneh dan punya banyak masalah, jadi sebaiknya jangan digunakan
    • Sebagai gantinya, lebih memilih Templ
  • Senang melihat ada pembahasan tentang routing
    • Sudah lama terbiasa dengan mux, tetapi tidak memperhatikan fitur rilis yang baru
  • Saya sudah menggunakan Go selama sebulan di pekerjaan baru, tetapi saya tidak menyukainya
    • Go terasa seperti tidak belajar apa pun dari perkembangan bahasa selama 20 tahun terakhir
    • Masalah nil membuat pekerjaan sederhana pun menjadi rumit
  • Saat menggunakan SQLite, sebaiknya gunakan pool penulis single-thread dan pool pembaca yang terpisah
    • Anda dapat meningkatkan konkurensi dengan BEGIN CONCURRENT
  • Saya menyukai kesederhanaan Go dan fakta bahwa ia tidak bergantung pada framework
    • Hanya dengan standard library dan library pihak ketiga yang sudah terbukti, Anda bisa membuat sesuatu yang hebat
    • Go cocok untuk membuat aplikasi web atau alat CLI
    • Saya menyukai penanganan error yang eksplisit
    • Saya penggemar berat Go