Dari PHP ke Go: Apa yang Paling Lama Saya Ubah Pola Pikirnya

Saya menulis PHP selama tujuh tahun. Saya menggunakan Laravel selama lima tahun di antaranya. Ketika saya pindah ke Go untuk memimpin migrasi dari monolit Laravel ke microservices, saya tidak datang dengan sebuah tutorial. Saya datang dengan kebiasaan PHP selama satu dekade.

Mempelajari sintaksnya mudah. Anda bisa memahami Go dalam satu sore. Bagian tersulitnya adalah membuang cara berpikir lama saya tentang kode.

Berikut adalah pergeseran mental yang membutuhkan waktu berbulan-bulan bagi saya untuk dikuasai:

  • Error Handling Dalam PHP, saya menggunakan try/catch. Error sering kali berpindah secara tidak terlihat ke handler global. Di Go, error adalah nilai (values). Sebuah fungsi mengembalikan error sebagai nilai terakhirnya. Anda harus menanganinya tepat di sana. Awalnya, ini terasa seperti pekerjaan tambahan. Belakangan, saya menyadari bahwa hal ini membuat kegagalan menjadi terlihat. Saat sebuah layanan gagal, pesan error bertindak sebagai jejak petunjuk (breadcrumb trail). Ia memberi tahu Anda dengan tepat di mana kegagalan terjadi tanpa perlu stack trace yang masif.

  • Memory dan State PHP menggunakan model shared-nothing. Setiap request dimulai dengan keadaan bersih (clean slate). Kebocoran memori (memory leaks) kurang berpengaruh karena prosesnya mati setelah request selesai. Go berbeda. Prosesnya tetap hidup selama ribuan request. Ini berarti variabel tingkat paket (package-level variable) dibagikan ke setiap request. Jika dua request mencoba menulis ke sebuah map pada saat yang sama, seluruh program akan crash. Di Go, Anda mengelola konkurensi (concurrency) sendiri. Anda harus menggunakan alat seperti race detector untuk menjaga keamanan.

  • Peran Context Dalam PHP, request adalah batasnya. Ketika request berakhir, semuanya berhenti. Di Go, tidak ada yang berhenti secara otomatis. Jika klien terputus, goroutine Anda mungkin terus berjalan dan membuang-buang sumber daya. Anda harus menggunakan context.Context untuk meneruskan sinyal pembatalan (cancellation signals) melalui kode Anda. Ini adalah tulang punggung yang menjaga layanan Anda tetap sehat di bawah beban berat.

  • Composition Over Inheritance Laravel sangat bergantung pada perluasan (extending) base class. Anda menambah fitur dengan mewarisi perilaku (inheriting behavior). Go tidak memiliki pewarisan kelas (class inheritance). Go menggunakan interface yang dipenuhi secara implisit. Anda mendefinisikan apa yang Anda butuhkan di tempat Anda menggunakannya. Hal ini membuat kode lebih mudah diuji dan diganti. Saya harus membuang insting saya untuk memperluas (extend) segalanya agar bisa menulis kode Go yang baik.

  • Clarity Over Cleverness PHP memungkinkan penggunaan magic methods dan dynamic typing. Anda bisa menulis kode yang cerdik dan ekspresif. Go sengaja dibuat membosankan. Compiler memaksa Anda menggunakan format standar dan mencegah penggunaan variabel yang tidak terpakai. Awalnya, ini terasa membatasi. Sekarang, saya menghargainya. Go dioptimalkan untuk orang yang membaca kode, bukan orang yang menulisnya. Kode yang membosankan lebih mudah diperbaiki pada jam 2 pagi saat terjadi insiden.

Bagian tersulit dari mempelajari bahasa baru bukanlah sintaks barunya. Melainkan asumsi-asumsi lama yang Anda bawa bersama Anda.

Sumber: https://dev.to/econ__11/from-php-to-go-what-took-me-longest-to-rewire-2nfn