Go vs. Python: Kako odabrati

Što se tiče lakoće i pogodnosti za programere i ubrzavanja brzine razvoja, dva programska jezika izdižu se iznad paketa - Python i Go. Danas je Python glavni oslonac za skriptiranje, devops, strojno učenje i testiranje, dok Go pokreće novi val računalstva zasnovanog na kontejneru u oblaku.

Ponekad je izbor između Pythona i Goa očit: odaberite Python zbog njegovog bogatog ekosustava, a odaberite Go zbog njegove brzine izvršavanja. Ali ponekad izbor nije toliko očit. U ovom ćemo članku proći kroz ključne razlike između ta dva jezika i istaknuti prednosti i nedostatke koji će vam pomoći u odabiru pravog jezika za vaš posao.

Go vs. Python: Pogodnost za programere

Python i Go dijele reputaciju prikladnih za rad. Oba jezika imaju jednostavnu i jasnu sintaksu te mali i lako pamtljivi skup značajki.

I Python i Go također imaju kratki ciklus uređivanja-kompajliranja. Python nema fazu kompilacije - ona se interpretira - pa se skripte izvršavaju gotovo odmah. Go kompajlira prije vremena, ali njegova faza kompilacije je daleko brža od one u jezicima poput C ++. Go se više osjeća kao skriptni jezik za rad, nego kao jezik kompiliran prije vremena.

Python koristi značajke dinamičkog tipkanja, što olakšava brzo prototipiranje aplikacija. Označavanje stvari vrstama nije obavezno i ​​može se učiniti radi postizanja dodatne ispravnosti programa (dobra ideja kod velikih projekata), ali nikada nije potrebno. Veće baze kodova mogu postati nezgrapne bez tipova.

U Goovom slučaju tipkanje je strogo, ali se u većini slučajeva lako zaključuje, pa je manje glomazno. To također znači da je većim bazama koda lakše upravljati izravno, jer su programeri Go slijedili tradiciju korištenja tipova. S druge strane, Gou nedostaju generički podaci, pa neke vrste koda koji bi se jezgrovitije izrazili u drugim jezicima - uključujući Python - postaju mnogo detaljniji i složeniji u programu Go.

Go vs. Python: Brzina izvođenja

Ako postoji jedno područje u kojem Go pobjeđuje Python ruke, to je brzina izvršenja. Go je reda veličine ili brži od Pythona, čak i bez ikakvih optimizacija od strane programera. Go se kompajlira izravno u izvorni strojni kod, dok je Pythonovu dinamiku izvođenja teško optimizirati za brzinu.

Unatoč tome, Python može biti "dovoljno brz" za mnoge uobičajene zadatke, pa vrijedi usporediti Python implementaciju s vašim slučajem upotrebe. Mnogi od najintenzivnijih poslova za koje se koristi Python ne izvršavaju se u samom Pythonu, već putem knjižnica napisanih na C ili C ++. Također, PyPy runtime, zamjenska zamjena za uobičajeno CPython runtime, može pružiti značajna ubrzanja za dugotrajne aplikacije poput web poslužitelja, čak i tamo gdje je Pythonova dinamičnost u velikoj upotrebi.

Go vs. Python: Implementacija

Go je dizajniran od samog početka kako bi omogućio da se kompajlirane aplikacije mogu lako implementirati kao samostalne binarne datoteke na više platformi. Suprotno tome, Python je izvorno zamišljen kao skriptni jezik, pa programi Python zahtijevaju Python vrijeme izvođenja.

Pythonu nedostaje izvorno rješenje za postavljanje skripte kao samostalne izvršne datoteke, ali za to se možete obratiti bibliotekama trećih strana poput PyInstaller. Također, rješenja za spremnike poput Dockera čine malo lakšim pakiranje aplikacije Python sa svojim vremenom izvođenja.

Go vs. Python: Upravljanje projektima

Još jedan bonus ubačen u Go od početka: moderne tehnike upravljanja softverskim projektima. Brze akcije naredbenog retka stvaraju novo spremište Go projekata i upravljaju njegovim ovisnostima. Vrijedno je napomenuti da Go nije uvijek imao dobru podršku za ovisnosti i ponovljive gradnje, ali sustav modula, uveden u Go 1.11, sada pruža zajednički mehanizam za rad s različitim verzijama knjižnica.

Python na neki način pati od suprotnog problema: mnoštvo alata za upravljanje projektima i izradu verzija često dovodi do zabune oko toga koji su alati i metode najbolji za određeni posao. Dobra mu je strana što također znači da niste zakinuti da radite stvari na određeni način.

Go vs. Python: Asinkrono programiranje

Asinkrone operacije - izvršavanje jednog zadatka dok se čeka da se drugi dovrši - pomažu da I / O-vezani kôd, poput mrežnih usluga, radi učinkovitije.

Go je podržao asinkronizaciju od samog početka putem goroutina, značajke sintakse jezika. Goroutine vam omogućuju pokretanje mnogih malih operacija paralelno, s izvornim komunikacijskim primitivom, kanalima, za sinkronizaciju operacija između njih. Go također dolazi s alatima za smanjenje slučajne zlouporabe tih značajki; još uvijek možete napisati kod koji zastoji ili ima uvjete utrke, ali lako je uhvatiti najčešće pogreške te vrste.

Python je nedavno stekao podršku na razini jezika za asinkrono ponašanje s  async/await ključnim riječima. Prije toga, asinkrono programiranje bilo je moguće u Pythonu, samo ne izravno. To znači da podrška za biblioteku modernih Python async idioma nije toliko napredna koliko bi mogla biti, jer je zakasnio na jezik. No podrška se poboljšava kako sve više knjižnica postaje async-kompatibilno, a neasync verzije Pythona prestaju biti podržane.

Go vs. Python: Rukovanje pogreškama i uklanjanje pogrešaka

Python i Go imaju duboko različite filozofije postupanja s pogreškama.

U Pythonu su pogreške prvoklasni objekti i šire se prema lancu poziva aplikacije kad god aplikacija izuzme iznimku. To rukovanje pogreškama čini neobaveznim, pa programer mora odlučiti koji će se slučajevi rješavati i ručno ih rješavati. Po istom principu, Pythonov pristup također omogućuje pisanje fleksibilnijih mehanizama za rukovanje pogreškama koji ne zatrpavaju svako mjesto poziva.

S Go, svaka funkcija vraća vrijednost za samu funkciju, kao i mogući objekt pogreške. Programi Go obično imaju eksplicitne napomene o mogućim uvjetima pogrešaka na web mjestima poziva, tako da kod ima nedvosmisleno rukovanje pogreškama. Loša strana ovog je opširan kod. Go također ima  panic/recoverključne riječi za rukovanje ekstremnim situacijama koje opravdavaju izravno ubijanje programa, iako naravno nisu namijenjene da se koriste obilato kao iznimke Pythona. Go 2.0 može sadržavati nove mehanizme za rješavanje pogrešaka koji smanjuju opširnost, ali ta je revizija jezika još uvijek daleko.

Go vs. Python: Testiranje

Ne temelji se sav moderni razvoj softvera na jedinstvenim i integracijskim testovima, ali projekti koji jesu su robusniji. Go i Python pružaju izvorne mehanizme za jedinstveno testiranje. Za Go postoji izvorni  testing paket. Za Python postoji  unittest okvir. 

Go uključuje metriku pokrivenosti testom kao dio  testing; s Pythonom vam je potreban paket treće strane  coverage, kako biste utvrdili koliko će temeljit biti vaš testni paket. S druge strane, Python ima vrlo fleksibilne ugrađene opcije ispitivanja koje nadopunjuju njegovu dinamičnost - npr. Ima tvrdnje za provjeru širokog raspona uobičajenih uvjeta, uključujući povećane iznimke. Python također koristi klasu za razlikovanje testnog koda od aplikacijskog, dok Go koristi konvencije o imenovanju funkcija i datoteka.

Go vs. Python: Ekosustavi

Tijekom godina Python i Go oko sebe su okupili impresivne knjižnice softvera treće strane koji odražavaju njihove slučajeve upotrebe i prednosti.

Python je dugo bio jezik za skriptiranje i automatizaciju, kao i za izgradnju web usluga i stvaranje jednostavnih sučelja između složenih sustava. Ova posljednja kategorija je kako je Python dominirao u znanosti o podacima i strojnom učenju: Python olakšava lijepljenje velikih, složenih knjižnica i tijekova rada koji se koriste u naprednoj analizi podataka i modelima strojnog učenja.

Goove priče o uspjehu vrte se oko njegovih asinkronih programskih značajki i matične brzine. Web poslužitelji, mrežne aplikacije, mikroservisi vezani uz CPU i uslužni programi sustava izvrsni su kandidati za Go. Većina softvera koji pokreće moderni razvoj aplikacija temeljen na spremnicima - uključujući Docker i Kubernetes - napisana je u programu Go.

Jedan od načina da shvatite hoćete li odabrati Go ili Python jest vidjeti što postojeći projekti napisani u njima nalikuju vašem trenutnom trudu. Postoji dobra šansa da je velik dio onoga što pokušavate izgraditi već izgradio netko drugi, tako da možete odabrati ne samo jezik već i prateće knjižnice koje odgovaraju.

Napokon, ne postoji ništa što govori da ne možete pisati i na Pythonu  i na Gou. Go možete koristiti za dijelove vaše aplikacije osjetljive na performanse i pružiti Python omote ili prednje dijelove za praktičnost i udobnost programera.