Cara saya dari Python ke Go - berbagi kiat dan sumber daya



Dari penerjemah: diterjemahkan untuk Anda artikel oleh Ilad Leev tentang transisi dari Python ke Go . Artikel ini akan berguna tidak hanya untuk programmer pemula, tetapi juga untuk siapa saja yang tertarik dengan cara apa pun.

Saya suka Python. Bahasa ini telah menjadi favorit saya selama lima tahun terakhir. Ia ramah, efisien, dan mudah dipelajari. Digunakan untuk hampir semua hal: mulai dari membuat skrip sederhana dan pengembangan web hingga visualisasi data dan pembelajaran mesin

Lakukan "pematangan" bertahap, komunitas yang luas dan fakta bahwa semakin banyak perusahaan yang mengadopsi bahasa ini setelah tes yang berhasil memaksa saya untuk memperhatikannya dan mempelajari literatur. Tapi posting ini bukan tentang yang lebih baik - Python atau Go : ada banyak perbandingan di internet. Menurut saya, itu semua tergantung aplikasinya. Saya akan berbicara tentang mengapa saya memilih Go, memberikan beberapa tips dan tautan ke sumber daya yang berguna untuk semua orang yang tertarik dengan topik ini.

Skillbox merekomendasikan: Pengembang Python langsung dari awal .

Kami mengingatkan Anda: untuk semua pembaca "Habr" - diskon 10.000 rubel saat mendaftar untuk kursus Skillbox apa pun menggunakan kode promo "Habr".




Pengamatan


Hal pertama yang saya lakukan di awal perjalanan adalah mempelajari tutorial resmi Tour Of Go yang sangat baik . Ini memberi pemahaman tentang sintaks bahasa.

Untuk meningkatkan pengetahuan saya, saya juga membaca buku " Go for Python Programmers ", yang memungkinkan saya untuk melanjutkan ke tahap berikutnya - coba-coba.

Saya mengambil fungsi yang biasa saya gunakan dalam Python (membuat serial JSON atau bekerja dengan panggilan HTTP), dan mencoba menulisnya di Go. Berkat perbandingan visual seperti itu, saya dapat mengidentifikasi perbedaan utama antar bahasa.

Tata letak proyek

Pertama-tama, Python tidak memerlukan hierarki direktori tertentu, sedangkan Go tidak.

Go menggunakan tata letak "standar" yang sedikit lebih rumit dan membutuhkan lebih banyak pekerjaan. Di sisi lain, sebagai hasilnya, kami mendapatkan basis kode yang terstruktur dengan baik yang menggunakan struktur modular, dan ketika memperluas proyek, kode tersebut tetap dipesan dengan ketat.

TutorialCara Menulis Go ” resmi menjelaskan cara mengatur pekerjaan Anda.

Pengetikan Kuat Statis

Go diketik secara statis, dan itu akan membuat Anda merasa bingung bagi mereka yang terbiasa dengan bahasa yang diketik secara dinamis seperti Python dan Ruby.

Tidak ada keraguan bahwa bahasa dinamis lebih rentan terhadap kesalahan, pengembang membutuhkan lebih banyak upaya dalam memeriksa data input. Contohnya adalah fungsi yang menghitung jumlah dua bilangan bulat. Jika Anda meneruskan string ke fungsi (yang tidak jarang), ini akan menyebabkan kesalahan TypeError.

Ini tidak dapat terjadi di Go, karena di sini Anda perlu mendeklarasikan tipe untuk setiap variabel dan fungsi dan jenis variabel apa fungsi akan kembali.

Pada awalnya itu menjengkelkan: bagi saya tampaknya fitur Go ini melambat, tetapi kemudian menjadi mengerti bahwa sebenarnya, menyatakan semuanya menghemat waktu dan mengurangi kemungkinan kesalahan.

Konkurensi asli

Go memiliki dukungan konkurensi asli menggunakan rutin dan pipa - ini nyaman.

Konsep saluran pada awalnya agak membingungkan. Namun, seiring waktu, itu menjadi lebih dimengerti, dan Anda mulai menikmati peluang baru, bekerja secara aktif dengan mereka.

Ini adalah visualisasi dari semua yang dikatakan oleh Ivan Danilyuk .
package main func main() { // create new channel of type int ch := make(chan int) // start new anonymous goroutine go func() { // send 42 to channel ch <- 42 }() // read from channel <-ch } 



Lebih banyak contoh di sini dan di sini .

Bekerja dengan JSON

Yah, json.loads () tidak ada lagi. Semuanya sederhana dalam Python: kami menggunakan json.loads dan tidak ada masalah.

Namun dalam Go, bahasa yang diketik secara statis, operasi ini menjadi lebih rumit.

Di sini, saat menggunakan JSON, semuanya sudah ditentukan sebelumnya. Bidang apa pun yang tidak cocok dengan struktur yang diberikan akan diabaikan, dan itu bagus. Ini dapat dianggap sebagai protokol yang disepakati sebelumnya antara kedua pihak. Data yang Anda terima di JSON harus diharapkan, dan bidang dan jenis JSON "disepakati" oleh kedua belah pihak.
 { “first”: “Elad”, “last”: “Leev”, “location”:”IL”, “id”: “93” } 

 type AccountData struct { First string `json:"first"` Last string `json:"last"` Location string `json:"location"` ID string `json:"id"` } 

Tentu saja, Anda dapat deserialize JSON tanpa struktur, tetapi jika memungkinkan ini harus dihindari dan sifat statis bahasa harus diperhitungkan.

Penguraian JSON di GO paling baik dijelaskan dalam posting ini atau di sini .

Malas untuk mengubah JSON Anda menjadi struktur Go? Tidak masalah, alat ini akan melakukan segalanya untuk Anda .

Kode bersih

Kompilator Go akan selalu berusaha menjaga kode Anda tetap bersih. Itu menganggap variabel yang tidak digunakan kesalahan kompilasi. Go menggunakan pendekatan unik yang memungkinkan sistem untuk memecahkan sebagian besar masalah pemformatan. Jadi, Go akan menjalankan program gofmt saat menyimpan atau mengompilasi dan memperbaiki format secara mandiri.

Apakah Anda peduli dengan variabel? Baiklah Cukup gunakan _ (garis bawah) dan tetapkan ke id kosong.

Tutorial mastrid untuk bagian ini bekerja dengan bahasa adalah informasi dari " Efektif Go ".

Menemukan perpustakaan dan kerangka kerja yang tepat

Saya menggunakan kerangka kerja dan perpustakaan dengan Python seperti Flask, Jinja2, Requests dan bahkan Kazoo dengan Python, jadi saya takut bahwa saya tidak akan menemukan sesuatu yang cocok untuk Go.

Tetapi komunitas telah menyelesaikan masalah ini: bahasa tersebut memiliki perpustakaan uniknya sendiri yang memungkinkan Anda untuk sepenuhnya melupakan apa yang Anda gunakan sebelumnya.

Inilah favorit saya.

Permintaan Python => net / http

net / http menyediakan implementasi klien HTTP dan server yang nyaman dan mudah digunakan.

Labu + Jinja2 => Gin

Gin adalah kerangka kerja HTTP web dengan API yang sangat sederhana: parameter jalur, file yang dapat diunduh, perutean grup (/ api / v1, / api / v2), format log khusus yang menyajikan file statis, rendering HTML, dan middleware kustom yang sangat kuat.
Beri nilai tolok ukur ini .

Penciptaan CLI => Cobra

Cobra adalah perpustakaan untuk membuat aplikasi CLI yang kuat, serta program untuk menghasilkan aplikasi dan file batch.
Cobra digunakan di banyak proyek Go besar, termasuk Kubernetes, etcd, dan OpenShift.

Berikut adalah beberapa perpustakaan yang sangat saya rekomendasikan: Viper , Gonfig, dan daftar yang mengagumkan ini adalah Awesome-Go .

Sumber daya bermanfaat lainnya


[1] Francesc Campoy - Anda tentu perlu memberi peringkat pada saluran YouTube dan profil GitHub ini .

[2] GopherCon - video .

[3] Buka Contoh Web .

[4] Golang Weekly , Gopher Academy , Golang News - akun Twitter.

Untuk meringkas


Sebagai pengguna Python biasa selama lima tahun, saya takut pergi ke Go akan menyakitkan.

Tapi tidak: ada dasar dari komunitas Go, yang memperluas dan melengkapi kemampuan bahasa, serta berbagai sumber daya bermanfaat yang akan membantu Anda dengan transisi.

Go tumbuh dengan cepat, dan saya berharap Google dapat menjadikannya bahasa utama untuk menulis aplikasi dan infrastruktur cloud.

Bergabunglah sekarang!



Skillbox merekomendasikan:

Source: https://habr.com/ru/post/id444866/


All Articles