Internet on täynnä hienoja koodeja. Ne muodostavat peruskallion, jonka varaan erilaiset infrastruktuurit on rakennettu. Jopa se alusta, jolla luet tätä, on rakennettu omistautuen loistavien koodien luomiseen. Vaikka keskivertokäyttäjä ei tätä huomaa, hyvät kehittäjät sen sijaan pyrkivät aina parantamaan sovelluksiaan (ja siten myös koodaustaan).
Pohja, jolle loistava koodi kirjoitetaan, perustuu kehittäjän taitoihin ja hänen valitsemaansa kieleen. Tämä johtaa väistämättä johonkin eeppiseen yhteenottoon kehittäjien välillä, ei pelkästään taitotasosta vaan ennen kaikkea heidän suosimastaan kielestä. Tähän tulokseen päädytään todennäköisimmin, kun asetetaan kaksi suurta ohjelmointikieltä, kuten Golang(Go) ja Python, vierekkäin.
Käykäämme kuitenkin hieman taaksepäin ja arvioikaamme molempia kieliä ansioiden ja toiminnallisuuden näkökulmasta. Otetaan pois henkilökohtaiset ennakkoluulot ja mieltymykset. Tasoitetaan sitten pelikenttä taidollisesti. Nyt meille jää vain kaksi loistavaa vaihtoehtoa: Go ja Python. Kysymys kuuluu nyt, kumpi sopii sinulle?
- Pythonin tarina
- Golang(Go)
- Golang vs. Pythonin suorituskyky
- Binäärihaku
- Kuplalajittelu
- Lue tiedostosta
- HTTP Pyyntöjen käsittely
- Python vs. Golang-verkkokehykset
- Gin
- Echo
- Go kit
- Yritykset, jotka käyttävät Golangia
- PayPal Taps Golang to Modernize and Scale
- American Express käyttää Golangia maksuihin & palkkioihin
- Salesforce hylkäsi Pythonin Golangin tilalle Einstein Analyticsissa
- Stream – Miksi vaihdoimme Pythonista Go:hon
- Pydio uudelleenkirjoitti yrityskäyttöön soveltuvan tiedostojen jakamisen Golangilla
- Repustate siirsi API:n Pythonista (ensin Djangosta, sitten Falconista) Go:han
- Which to choose?
- Golang on nopea oppia, kehittää ja käyttää
Pythonin tarina
Kysy joiltakin kehittäjiltä ja saat kuulla, että mitään ei ollut ennen Pythonia eikä tule olemaan sen jälkeen. Vuosien varrella se on onnistunut saamaan kulttimaineen, koska se on erittäin hyvä ohjelmointikieli. Internet on täynnä ihmeitä, jotka on luotu Pythonilla.
Python on vanha, ohjelmointivuosien mittakaavassa. Se ideoitiin ensimmäisen kerran jo vuonna 1991. Ja iän myötä tulee tiettyjä etuja. Sillä on laaja kannattajakunta, mikä tarkoittaa, että se on vakaa ja hyvin dokumentoitu. Useimmiten löydät kirjastoja lähes kaikkeen ja koodinäytteitä melkein kaikkeen, mitä voit ajatella. Kehittäjille ja yrityksille tämä tarkoittaa sitä, että valinta käyttää Pythonia tuo mukanaan runsaasti kokemusta ja koodausta, jotka vain odottavat, että niihin pääsee käsiksi.
Pythonia pohjana käyttäviä avoimen lähdekoodin projekteja on paljon, joten useimmissa tapauksissa et joudu aloittamaan tyhjästä. Se on hyvin integroitu yrityssovelluksiin, ja sitä voidaan käyttää konekielen ja tekoälyn sovelluksissa. Mutta sillä on myös huonot puolensa. Se ei esimerkiksi ole ihanteellinen muistia vaativiin tehtäviin, on hieman hidas suorituksissa ja soveltuu huonosti mobiilisovellusten kehittämiseen.
Golang(Go)
Kehitettiin Go:ssa vuonna 2009. Go oli ratkaisu ongelmaan. Sen tavoitteena oli luoda kieli, joka poisti kaikki C++:n kaltaisista kielistä löytyvät rasitteet ja ylilyönnit. Tämä antaa sille suorituskyky- ja nopeuslisäyksen, joka tekee sen kanssa työskentelystä ilahduttavaa. Lisäksi useimmat kehittäjät, jotka tarttuvat Go-kieleen ensimmäistä kertaa, eivät jää tuuliajolle, sillä tutut elementit ja helppokäyttöisyys tulevat miellyttävänä yllätyksenä.
Tämä ei tarkoita, että kieli olisi kaikissa tapauksissa täydellinen. Vaikka se vie nopeuden ja tyylikkyyden seuraavalle tasolle, se jättää kuitenkin muutamia toivomisen arvoisia asioita. Ensinnäkin siinä ei ole laajaa kirjastoa eikä tukea periytymiselle. Lisäksi siinä ei ole GUI-kirjastoa tai tukea oliopohjaiselle ohjelmoinnille. Se, mitä sillä on, on kevyet säikeet (Goroutines), älykäs standardikirjasto, vahva sisäänrakennettu tietoturva ja se on helppo koodata minimaalisella syntaksilla.
Golang vs. Pythonin suorituskyky
Voisimme puhua loputtomiin Golangin tai Pythonin hyvistä ja huonoista puolista, mutta kun kyse on loppujen lopuksi siitä, mitä me kaikki etsimme, on se, miten ne toimivat. Teimme siis testejä testilaitteellamme, jossa on Intel® Core™ i7-9700K -suoritin @ 3,60 GHz × 8 ydintä. Ja käytetty koodi löytyy täältä.
Binäärihaku
Loimme listoja inteistä (1:stä 100000:een) ja käytimme sitten binäärihakua löytääkseen aina saman numeron 729. Tulokset ovat:
Kieli | Nopeus |
---|---|
Go | 20.8 ns/op |
Python | 2442.13377 ns/op |
Kuplalajittelu
Taas luotiin lista kokonaislukuja (tällä kertaa satunnaisia, 10000 alkion pituisia) ja lajiteltiin ne kuplalajittelualgoritmeilla.
Kieli | Nopeus |
---|---|
Go | 90805247 ns/op (0,09s) |
Python | 6708160950.6 ns/op (6,7s) |
Lue tiedostosta
Yksinkertainen testi ”lorem ipsum” tekstitiedoston lukemisesta.
Kieli | Nopeus |
---|---|
Go | 5305 ns/op |
Python | 58359 ns/op |
HTTP Pyyntöjen käsittely
HTTP-palvelimen tekeminen on todella helppoa, mutta me näimme vaivaa ja teimme analogisen Pythonilla. Tarkistimme, kuinka kauan kestää vastata yksinkertaiseen ”hello world!”-viestiin.
Kieli | Nopeus |
---|---|
Go | 0.070 ms/RQ |
Python | 1.261 ms/RQ |
Python vs. Golang-verkkokehykset
Yksi Pythonin käytön suurimmista eduista on laaja kokoelma saatavilla olevia kirjastoja ja kehyksiä. Django ja Flask ovat kaksi suosituinta Python-verkkokehystä, joiden avulla voit rakentaa verkkosovelluksen tai API:n nopeimmassa mahdollisessa ajassa.
Golangilla ei ole yhtä hallitsevaa kehystä, kuten Django Pythonille tai Laravel PHP:lle, ja Golang-yhteisö suhtautuu tietyllä tavalla vastenmielisesti kehyksiin. Go 2018 -tutkimuksen tulokset osoittavat, että Golang-verkkokehitys on yleisintä 65 prosentin osuudella, ja se kasvatti valta-asemaansa ensisijaisena alueena, jolla kyselyyn vastanneet työskentelevät (edellisvuoden 61 prosentista): Verkkokehitys on ollut Go-kehityksen yleisin alue vuodesta 2016 lähtien.
Tässä suosituimmat Golang-verkkokehykset:
Gin
Gin on Golang-verkkokehys, joka tunnetaan suorituskykyisten sovellusrajapintojen kehittämiseen. Se on myös yksi yksinkertaisimmista kehyksistä oppia. Sen opetteluun menee noin 10 minuuttia. Jos tarvitset suorituskykyä ja hyvää tuottavuutta, tulet rakastamaan Giniä.
Ominaisuudet
- Nopeampi suorituskyky:
- Middleware-tuki: Radix-puuhun perustuva reititys, pieni muistijalanjälki
- : Saapuva HTTP-pyyntö voidaan käsitellä välityspalveluiden ketjussa ja lopullinen toiminto
- Reittien ryhmittely: Järjestä reitit paremmin
- Virheiden hallinta: Gin tarjoaa kätevän tavan kerätä kaikki HTTP-pyynnön aikana ilmenneet virheet
- Renderöinti sisäänrakennettuna: Gin tarjoaa helppokäyttöisen API:n JSON-, XML- ja HTML-renderöintiin
- Laajennettavissa: Uuden väliohjelmiston luominen on helppoa, tutustu esimerkkikoodeihin
Echo
Echo on suorituskykyinen, laajennettavissa oleva ja minimalistinen Go web-kehys, joka tarjoaa optimoidun HTTP-reitittimen, ryhmä-API:t, datan sitomisen JSONille ja XML:lle, HTTP/2-tuen ja paljon muuta.
Vaikka Gin on hieman suositumpi (36k GitHub-tähteä), monet kehittäjät valitsevat Echon (16k GitHub-tähteä), koska sillä on parempi dokumentaatio ja se on hieman nopeampi kehys.
Ominaisuudet
- Optimoitu HTTP-reititin, joka älykkäästi priorisoi reittejä
- Kestävä ja skaalautuva RESTful API, helposti organisoitavissa ryhmiin
- Laajennettavissa oleva väliohjelmistokehys, monia sisäänrakennettuja väliohjelmia, väliohjelmat voidaan asettaa juuri-, ryhmä- tai reittitasolla
- Datan sitominen JSON:lle, XML ja lomakkeen hyötykuorma
- Käytännölliset toiminnot erilaisten HTTP-vastausten lähettämiseen, mukaan lukien JSON, XML, HTML, File, Attachment, Inline, Stream tai Blob
- Räätälöity keskitetty HTTP-virheenkäsittely ja helposti laajennettavissa oleva API
Go kit
Go kit on ohjelmointityökalupakki, jonka avulla voi rakentaa mikropalveluja (tai tyylikkäitä monoliitteja). Go Kit on mielipidekehys. Se ratkaisee hajautettujen järjestelmien ja sovellusarkkitehtuurin yleisiä ongelmia, jotta voit keskittyä liiketoiminnan arvon tuottamiseen.
Ominaisuudet
- Toimi heterogeenisessa SOA:ssa – odota, että olet vuorovaikutuksessa enimmäkseen muiden kuin Go-kit-palveluiden kanssa
- RPC ensisijaisena viestinvälitysmallina
- Liitettävissä oleva serialisointi ja kuljetus – ei vain JSON HTTP:n kautta
- Toimii olemassa olevissa infrastruktuureissa – ei mandaatteja tietyille työkaluille tai teknologioille
Yritykset, jotka käyttävät Golangia
Kärkipään yritykset ovat ottaneet laajalti käyttöön Golangin. Maailmanlaajuisesti Go:ta käyttää yli miljoona kehittäjää – pankki- ja kauppa-, peli- ja media-, teknologia- ja muilla toimialoilla, niinkin erilaisissa yrityksissä kuin PayPal, Capital One, IBM, Salesforce, Twitch, Uber, Dropbox ja tietysti Google.
Tässä muutamia esimerkkitapaustutkimuksia:
PayPal Taps Golang to Modernize and Scale
Gon arvo tuottaa puhdasta, tehokasta koodia, joka skaalautuu helposti ohjelmistojen käyttöönoton skaalautuessa, teki kielestä vahvan sopivuuden PayPalin tavoitteiden tukemiseen.
Katso tapaustutkimus →
American Express käyttää Golangia maksuihin & palkkioihin
Go tarjoaa American Expressille nopeutta ja skaalautuvuutta, jota se tarvitsee sekä maksu- että palkitsemisverkossaan.
Katso tapaustutkimus →
Salesforce hylkäsi Pythonin Golangin tilalle Einstein Analyticsissa
Salesforce selittää, miksi Googlen Go -ohjelmointikieli sopii Einstein Analyticsiin paremmin kuin Python ja C.
Katso tapaustutkimus →
Stream – Miksi vaihdoimme Pythonista Go:hon
Meillä Streamissa on pieni kehitystiimi, joka pyörittää syötteitä ja chattia yli 500 miljoonalle loppukäyttäjälle. Gon yhdistelmä loistavaa ekosysteemiä, uusien kehittäjien helppoa sisäänpääsyä, nopeaa suorituskykyä, vankkaa tukea samanaikaisuudelle ja tuottavaa ohjelmointiympäristöä tekevät siitä loistavan valinnan.
Katso tapaustutkimus →
Pydio uudelleenkirjoitti yrityskäyttöön soveltuvan tiedostojen jakamisen Golangilla
Pydio, pilvitallennusratkaisu ajalta ennen Dropboxia, muuttui täysimittaiseksi synkronointi- ja jakoalustaksi, ja sovelluksen osalta pitäydyttiin sen alkuperäisessä teknisessä pinossa: LAMP, kuten Linux/Apache/MySQL/PHP. Lue artikkeli motiiveista uudelleenkirjoittamiseen kokonaan Golangilla, uudesta arkkitehtuurista ja sen taustalla olevista valinnoista.
Katso tapaustutkimus →
Repustate siirsi API:n Pythonista (ensin Djangosta, sitten Falconista) Go:han
Migraatio vähensi vaadittujen EC2-instanssien määrää 85 %:lla ja API-kutsun keskimääräistä vasteaikaa 100 ms:sta 10 ms:aan. Pythonin ja Go:n samankaltaisuuden vuoksi he pystyivät nopeasti muokkaamaan nokialla kirjoitetut yksikkötestejämme Go:n vaatimaan rakenteeseen sopiviksi muutamalla yksinkertaisella sed-skriptillä.
Katso tapaustutkimus →
Which to choose?
Vaikka Python on pysynyt yhteisön suosikkina säilyttäen vuoden 2019 ensimmäisellä neljänneksellä GitHubin nopeimman ohjelmointikielen 2. sijan vetopyyntöjen osalta (+17 %), Golang ei ole kovinkaan kaukana perässä ja on kuumana sen kannoilla sijalla 4 (+8 %). Valinta Golangin ja Pythonin välillä hämärtyy entisestään. Siitä huolimatta on otettava huomioon muutamia asioita, kun valitset, kumpi voisi olla sinulle sopiva.
-
Skaalautuvuus: Golang luotiin skaalautuvuutta ajatellen. Siinä on sisäänrakennettu rinnakkaisuus, jolla voidaan käsitellä useita tehtäviä samanaikaisesti. Python käyttää rinnakkaisuutta, mutta se ei ole sisäänrakennettu; se toteuttaa rinnakkaisuuden säikeiden avulla. Tämä tarkoittaa, että jos aiot työskennellä suurten tietokokonaisuuksien kanssa, Golang vaikuttaa sopivammalta valinnalta.
-
Suorituskyky: Python ei tunnetusti ole muisti- tai prosessoriystävällinen, mutta valtavan määrän kirjastoja ansiosta Python toimii tehokkaasti peruskehitystehtävissä. Golangissa on sisäänrakennettuja ominaisuuksia, ja se soveltuu paremmin mikropalveluohjelmistoarkkitehtuureihin.
-
Sovellukset: Python loistaa, kun sitä käytetään tekoälyn, data-analytiikan, syväoppimisen ja web-kehityksen koodien kirjoittamiseen. Kun taas Golangia on käytetty järjestelmäohjelmointiin, sitä rakastavat kehittäjät, jotka käyttävät sitä pilvilaskennan ja klusterilaskennan sovelluksiin.
-
Yhteisö & Kirjasto: Kuten aiemmin mainittiin, Pythonin ikä antaa sille tiettyjä etuja. Yksi niistä on sen kirjastojen määrä ja suuri yhteisö, joka tukee sitä. Golang taas on vielä kasvava kieli, eikä sillä ole yhtä paljon kirjastoja ja yhteisön tukea kuin Python-komennoilla. Silti Go:ta ei pidä vielä laskea pois. Sen kasvuvauhti ja omaksumisvauhti on uskomaton, ja se laajenee joka päivä.
-
Toteutus:
Kun nämä kaikki otetaan huomioon, käyttötapauksesi ratkaisee, mikä kieli kannattaa ottaa käyttöön. Kun otetaan huomioon skenaario, jossa olet perustamassa kehitystiimiä luomaan mikropalveluja, Golang olisi tässä tapauksessa järkevämpi valinta, koska se on sekä nopea, sillä on helppo koodata ja se skaalautuu erinomaisen hyvin. Python taas on enemmän suunnattu tekoälyyn, ML:ään ja data-analyysiin.
Siten Go olisi useimmissa tapauksissa voittaja, ja sitä pidetään varteenotettavana vaihtoehtona Pythonille. Kehittäjien on valittava ohjelmointikieli ottaen huomioon kehitysprojektin luonne ja koko sekä siihen osallistuvien henkilöiden taidot.
Hyvä uutinen on kuitenkin se, että valinnasta riippumatta molemmat kielet kehittyvät jatkuvasti. Vaikka Golang saattaa vaikuttaa useimmissa tapauksissa itsestään selvältä valinnalta, Python-yhteisö ei vain istu toimettomana. Molemmat kielet laajenevat ja kasvavat. Tämä tarkoittaa, että tulemme näkemään lisää toiminnallisuutta ja parannuksia tulevaisuudessa.