Pergi vs. Python: Bagaimana memilih

Dalam hal kemudahan dan kenyamanan bagi pengembang dan mempercepat kecepatan pengembangan, dua bahasa pemrograman naik di atas paket — Python dan Go. Saat ini, Python adalah andalan pembuatan skrip, devops, pembelajaran mesin, dan pengujian, sementara Go memberdayakan gelombang baru komputasi cloud-native berbasis container.

Terkadang pilihan antara Python dan Go jelas: Pilih Python karena ekosistemnya yang kaya, pilih Go untuk kecepatan eksekusinya. Namun terkadang pilihannya tidak begitu jelas. Dalam artikel ini, kita akan membahas perbedaan utama antara kedua bahasa tersebut, dan menyoroti pro dan kontra untuk membantu Anda memilih bahasa yang tepat untuk pekerjaan yang sedang Anda kerjakan.

Pergi vs. Python: Kenyamanan pengembang

Python dan Go berbagi reputasi nyaman untuk digunakan. Kedua bahasa tersebut memiliki sintaks yang sederhana dan lugas serta sekumpulan fitur yang kecil dan mudah diingat.

Baik Python dan Go juga memiliki siklus edit-compile-run yang singkat. Python tidak memiliki fase kompilasi — sudah diinterpretasikan — jadi skrip dieksekusi hampir seketika. Lakukan kompilasi sebelumnya, tetapi fase kompilasi jauh lebih cepat daripada bahasa seperti C ++. Go lebih terasa seperti bahasa scripting untuk dikerjakan daripada bahasa yang telah disusun sebelumnya.

Python menggunakan fitur pengetikan dinamis, membuatnya lebih mudah untuk membuat prototipe aplikasi dengan cepat. Memberi label pada hal-hal dengan tipe adalah opsional, dan dapat dilakukan untuk menegakkan ketepatan program tambahan (ide yang bagus untuk proyek besar), tetapi itu tidak pernah diperlukan. Basis kode yang lebih besar bisa menjadi berat tanpa tipe.

Dalam kasus Go, mengetik sangat ketat, tetapi mudah disimpulkan dalam banyak kasus, jadi tidak terlalu rumit. Ini juga berarti basis kode yang lebih besar lebih mudah untuk dikelola di luar kotak, karena programmer Go telah mengikuti tradisi penggunaan tipe. Di sisi lain, Go kekurangan generik, sehingga beberapa jenis kode yang akan diekspresikan secara lebih ringkas dalam bahasa lain — termasuk Python — menjadi lebih bertele-tele dan boilerplate-y di Go.

Pergi vs. Python: Kecepatan runtime

Jika ada satu area di mana Go mengalahkan Python, itu adalah kecepatan eksekusinya. Go adalah urutan besarnya atau lebih cepat dari Python, bahkan tanpa pengoptimalan apa pun di pihak pengembang. Go mengkompilasi langsung ke kode mesin asli, sementara dinamisme runtime Python sulit untuk dioptimalkan kecepatannya.

Namun demikian, Python bisa "cukup cepat" untuk banyak tugas umum, jadi ada baiknya Anda melakukan benchmarking pada implementasi Python untuk kasus penggunaan Anda. Banyak pekerjaan yang paling intensif kinerja yang digunakan Python tidak dieksekusi dengan Python itu sendiri, tetapi melalui pustaka yang ditulis dalam C atau C ++. Juga, runtime PyPy, pengganti drop-in untuk runtime CPython konvensional, dapat memberikan percepatan yang signifikan untuk aplikasi yang berjalan lama seperti server web, bahkan ketika dinamisme Python banyak digunakan.

Pergi vs. Python: Penerapan

Go dirancang sejak awal untuk memungkinkan aplikasi yang dikompilasi siap digunakan sebagai biner yang berdiri sendiri di berbagai platform. Python, sebaliknya, pada awalnya dipahami sebagai bahasa scripting, jadi program Python membutuhkan runtime Python.

Python tidak memiliki solusi asli untuk menerapkan skrip sebagai executable yang berdiri sendiri, tetapi Anda dapat beralih ke pustaka pihak ketiga seperti PyInstaller untuk itu. Selain itu, solusi container seperti Docker membuatnya lebih mudah untuk mengemas aplikasi Python dengan runtime-nya.

Pergi vs. Python: Manajemen proyek

Bonus lain yang dimasukkan ke dalam Go dari awal: teknik manajemen proyek perangkat lunak modern. Tindakan baris perintah cepat membuat repositori proyek Go baru dan mengelola dependensinya. Perlu dicatat bahwa Go tidak selalu memiliki dukungan yang baik untuk dependensi dan build yang dapat direproduksi, tetapi sistem modul, yang diperkenalkan di Go 1.11, sekarang menyediakan mekanisme umum untuk bekerja dengan versi library yang berbeda.

Dalam beberapa hal, Python mengalami masalah sebaliknya: Banyaknya manajemen proyek dan alat versi sering menimbulkan kebingungan tentang alat dan metode mana yang terbaik untuk pekerjaan tertentu. Di sisi positifnya, itu juga berarti Anda tidak terikat dalam melakukan sesuatu dengan cara tertentu.

Go vs. Python: Pemrograman asinkron

Operasi asinkron — menjalankan satu tugas sambil menunggu tugas lain selesai — membantu kode yang terikat I / O, seperti layanan jaringan, berjalan lebih efisien.

Go telah mendukung async secara native sejak permulaannya melalui goroutine, sebuah fitur sintaks bahasa. Goroutine memungkinkan Anda menjalankan banyak operasi kecil secara berdampingan, dengan komunikasi primitif asli, saluran, untuk menyinkronkan operasi di antara mereka. Go juga dilengkapi dengan perkakas untuk mengurangi penyalahgunaan fitur tersebut secara tidak sengaja; Anda masih bisa menulis kode yang menemui jalan buntu atau memiliki kondisi balapan, tetapi mudah untuk menangkap kesalahan paling umum semacam itu.

Python baru-baru ini mendapatkan dukungan tingkat bahasa untuk perilaku asinkron dengan  async/await kata kunci. Sebelumnya, pemrograman asinkron dimungkinkan dengan Python, hanya saja tidak langsung. Itu berarti dukungan pustaka untuk idiom asinkron Python modern tidak semaju yang diharapkan, karena ini terlambat dalam bahasa. Tetapi dukungan meningkat karena lebih banyak pustaka menjadi kompatibel dengan asinkron dan versi non-asinkron dari Python tidak lagi didukung.

Go vs. Python: Penanganan kesalahan dan debugging

Python dan Go memiliki filosofi yang sangat berbeda untuk penanganan error.

Dalam Python, kesalahan adalah objek kelas satu, dan mereka menyebarkan rantai panggilan aplikasi setiap kali aplikasi melontarkan pengecualian. Hal ini membuat penanganan kesalahan menjadi opsional, sehingga programmer harus memutuskan kasus mana yang akan ditangani dan menanganinya secara manual. Dengan cara yang sama, pendekatan Python juga memungkinkan untuk menulis mekanisme penanganan kesalahan yang lebih fleksibel yang tidak mengacaukan setiap situs panggilan.

Dengan Go, setiap fungsi mengembalikan nilai fungsi itu sendiri, serta kemungkinan objek kesalahan. Program Go biasanya memiliki anotasi eksplisit tentang kemungkinan kondisi kesalahan di situs pemanggilan fungsi, sehingga kode memiliki penanganan kesalahan yang tidak ambigu. Kelemahan dari ini adalah kode verbose. Go juga memiliki  panic/recoverkata kunci untuk menangani situasi ekstrim yang menjamin program langsung dihentikan, meskipun tentu saja itu tidak dimaksudkan untuk digunakan sebanyak pengecualian Python. Go 2.0 mungkin menampilkan mekanisme penanganan kesalahan baru yang mengurangi verbositas, tetapi revisi bahasa tersebut masih jauh.

Pergi vs. Python: Pengujian

Tidak semua pengembangan perangkat lunak modern menggunakan pengujian unit dan integrasi, tetapi proyek yang melakukannya lebih kuat. Go dan Python keduanya menyediakan mekanisme asli untuk pengujian unit. Untuk Go, ada testing paket asli  . Untuk Python, ada  unittest kerangka kerjanya. 

Go menyertakan metrik cakupan pengujian sebagai bagian dari  testing; dengan Python, Anda memerlukan paket pihak ketiga  coverage,, untuk menentukan seberapa menyeluruh rangkaian pengujian Anda nantinya. Di sisi lain, Python memiliki opsi pengujian bawaan yang sangat fleksibel untuk melengkapi dinamismenya — misalnya, ia memiliki pernyataan untuk memeriksa berbagai macam kondisi umum termasuk pengecualian yang dimunculkan. Python juga menggunakan kelas untuk membedakan kode pengujian dari kode aplikasi, sedangkan Go menggunakan fungsi dan konvensi penamaan file.

Pergi vs. Python: Ekosistem

Selama bertahun-tahun, Python dan Go telah mengumpulkan pustaka perangkat lunak pihak ketiga yang mengesankan di sekitar mereka yang mencerminkan kasus penggunaan dan kekuatannya.

Python telah lama menjadi bahasa masuk untuk skrip dan otomatisasi, serta untuk membangun layanan web dan membuat antarmuka yang mudah digunakan antara sistem yang kompleks. Kategori terakhir ini adalah bagaimana Python mendominasi ilmu data dan pembelajaran mesin: Python memudahkan untuk merekatkan pustaka dan alur kerja yang besar dan kompleks yang digunakan dalam analitik data tingkat lanjut dan model pembelajaran mesin.

Kisah sukses Go berkisar pada fitur pemrograman asinkron dan kecepatan asli sistem. Server web, aplikasi jaringan, layanan mikro terikat CPU, dan utilitas sistem adalah kandidat yang tepat untuk Go. Sebagian besar perangkat lunak yang mendukung pengembangan aplikasi modern berbasis kontainer — termasuk Docker dan Kubernetes — ditulis dalam Go.

Salah satu cara untuk mengetahui apakah akan memilih Go atau Python adalah dengan melihat proyek apa yang tertulis di dalamnya yang menyerupai upaya Anda saat ini. Ada kemungkinan besar sebagian besar dari apa yang Anda coba bangun telah dibuat oleh orang lain, sehingga Anda tidak hanya dapat memilih bahasanya tetapi juga perpustakaan pendukung yang sesuai.

Terakhir, tidak ada yang mengatakan Anda tidak dapat menulis dengan Python  dan Go. Anda dapat menggunakan Go untuk bagian yang sensitif terhadap kinerja aplikasi Anda, dan menyediakan pembungkus Python atau frontend untuk kenyamanan dan kenyamanan pengembang.