Szerző: HIRDETÉS

2021. szeptember 24. 09:20

Go baby, Go!

A havi 2,1 millió látogatót fogadó Jófogáshoz hasonló forgalmú weblapok nagyon komoly üzemeltetési és fejlesztési kihívásokat rejtenek, ezek leküzdéséhez pedig elengedhetetlen a megfelelő „digitális beszédmód”. Nem véletlen, hogy az említett online termékeket fejlesztő Adevinta Hungary választása a Go programnyelvre esett.

Egy adott szoftverprojektnél kulcsfontosságú a célnak leginkább megfelelő programnyelv kiválasztása – különösen igaz ez a Jófogás kaliberű termékek esetében, amelyeket napi szinten rengetegen használnak és amelyekkel azok fejlesztői hosszú távon terveznek. Éppen ezért az Adevinta Hungary csapata sok szempontot körbejárt, mint a nyelv kiforrottsága, funkcionalitása, illetve nem utolsósorban azt, hogy van-e egyáltalán elég, a nyelvet ismerő, megfelelő tudású szakember a magyarországi piacon.

Utóbbi potenciálisan szűk keresztmetszetet jelenthet ugyan, de ez szerencsére orvosolható, ha a vállalatnál biztosítanak teret az adott nyelvvel való megismerkedésre. Mint Vincze Tamás, a cég software architectje elmondta, az Adevintánál erre adott a lehetőség. Noha egy PHP-s vagy Node-os backendest valószínűleg könnyebb találni, mint Go szakembert, egy programozási nyelv után egy másikat megtanulni már sokkal könnyebb. Így nem feltétlenül kell egy jelöltnek egyből „góul” beszélnie, a cégnél van mód, hogy egy más programnyelvben kellően jártas kolléga is elsajátíthassa azt.

A Go egy immár 9 éve használt programozási nyelv, ezért a standard libekben nagyon sok alapfunkció implementálva van. Akár 3rd party package-ek nélkül is meg lehet írni service-eket, de nagyon sok, jó minőségű open source lib is készült hozzá, így azokból is lehet bőven szemezgetni. Elég komoly szakmai közösséget tudhat magáénak, úgyhogy számos helyen lehet izgalmas esettanulmányokat és adott esetben segítséget is keresni, ami szintén a Go mellett szól.

CLEANCODE EGYSZERŰEN

Tamás több mint 10 éve dolgozik fejlesztőként. IT-sként elsősorban a Go programnyelv vonzotta az Adevintához, valamint az, hogy a cég saját webes termékeket és technológiát fejleszt, továbbá pedig az, hogy nagy és stabil vállalatról van szó. Egy fejlesztőnek, legyen az junior, medior vagy senior, kényelmes és hatékony olyan programozási nyelvvel dolgozni, amit napjaink követelményeihez szabtak.

CleanCode hívő vagyok, ezért számomra a Go legfőbb előnye, hogy a nyelvet szándékosan egyszerűre tervezték, így a megoldandó problémákra is kevesebb féle megoldás létezik. Egy ninja nem ír merőben más kódot, mint egy junior. Ennek az egyszerűségnek az előnye, hogy nem annyira meredek a tanulási görbe és más munkáját is könnyebben lehet folytatni. A jó minőségű és mennyiségű standard libek miatt nem szükséges nagy rendszerességgel csomagokat frissíteni, illetve az automatikus memória-felszabadítással rengeteg időt lehet megspórolni, nem kell kézzel takarítani. A fordítás és futás idejű típusosság is segít a kód értelmezésében és számottevő mennyiségű hibázási lehetőségtől is megkíméljük magunkat, ráadásul a futási sebességre is jó hatással van. Továbbá a konkurenciakezelés is nagyon tisztán van megoldva. Ezek az előnyök miatt a fejlesztés és a karbantartás is gyors, hatékony, mind a fejlesztőknek, mind a gépnek is – fogalmazott Tamás.

A CleanCode rajongók jellemzően nagyon szeretik, ha nem kell olyan karaktereket leírniuk, amelyek nem hordoznak információt. A Go esetében például azt egyszerűen elintézték, hogy publikus vagy privát egy változó, hiszen kis- vagy nagy kezdőbetűvel kell írni, illetve nincs feleslegesen begépelendő és olvasandó szó. Még az IDE-re sem kell hagyatkozni, szemmel jól látható, hogy mi a visibility. Ráadásul kényelmes az API-kat megírni, a JSON inputokat natív data constructokká alakítani, majd a response esetében azokat visszaalakítani. Gyakori use-case-ek tehát nagyon kevés kód megírásával, tisztán és egyszerűen implementálhatók.

A Go-ban nincs öröklődés, de van helyette composition, ami sokak szerint elegánsabb, követhetőbb megoldás, mivel a Go-ban nagyon kevés kód leírásával használható és jól olvasható. A visibility pedig csak kétféle állapotú, ezért elég a kis és nagybetű a megkülönböztetésre. Ami pedig az implicit interfészeket illeti, előnyösek lehetnek, mivel, ha a funkciók ugyanolyan szignatúrával bírnak, mint amit az interfész megkíván, akkor az megfelel neki. Mindezek mellett jó pont, hogy a package-ek mappaként vannak implementálva, így szét lehet dobálni a kódot fájlokra anélkül, hogy a belső használatú fájlok szükségszerűen láthatóvá válnának.

BEÉPÍTETT FEGYVERTÁR

A fejlesztői munkát mindez jelentősen megkönnyítheti, hiszen a review-ban és a maintenance-ben kevesebb dolgot kell elolvasni, és azok kevésbé változatosak, attól függetlenül, hogy ki készítette. Az egyszerűség és hatékonyság mellett még mindenképpen kiemelendő, hogy a Go számos eszközt biztosít, amelyek kellemesebbé és élvezhetőbbé is teszik a napi munkát. Ilyenek például a csomagkezelés, a statikus elemzés, a linter, a beépített tesztelési keretrendszer, ami képes coverage riport készítésére is, a benchmark rendszer, vagy a beépített forráskód formázó, amivel el lehet kerülni azt, hogy a code review során a fejlesztők alapvető formázási kérdéseken vitatkozzanak.

vincze.tamas2

Az Adevintánál multi stage buildet készítenek, a kódot golang base image-be buildelik, majd végül fognak egy scratch image-et, és belemásolják a binárist. Mindeközben kezelik a szükséges tanúsítványokat és minden egyebet, köztük a nem root felhasználókat is. A megoldás egyszerű, nagyszerű és nagyon vékony. Miután már minden szükséges build és artifact feltöltés befejeződött, mivel a Docker konténer mérete kicsi, öröm nézni, hogy egy 5 Mb méretű docker image-nél milyen gyorsan elvégezhető a deployment. Sőt, a scratch használata még biztonságosabb is.

Persze a Go kerítése sincs kolbászból, a hibakezelés elsőre kicsit szokatlannak tűnhet az avatatlan szemnek. Nincs error bubbling, nem lehet Go-ban valahol elsütni egy exceptiont, hogy azt majd valahol valami „elkapja”. Mindent explicit módon kell lekezelni vagy épp teljesen ignorálni. Továbbá ahol sokkal nagyobb hangsúlyt kell kapnia a teljesítménynek vagy a runtime méretének, nem is biztos, hogy érdemes bevetni a nyelvet – például operációs rendszer vagy okos érzékelő fejlesztésére, az Adevintánál azonban nem ilyen területen fejlesztenek. Elsőre sokaknak az is fura és nehezen megszokható lehet, hogy a Go-ban az az idiomatic, hogy egy funkció több visszatérési értéket ad, de közben a hibakezelés miatt ez szükségszerű. Kézi debuggolásnál pedig még az is előfordulhat, hogy a fordító „sír”, amennyiben nem használatban lévő változó kerül deklarálásra.

Ezzel együtt a Go nyelv népszerűségét és használhatóságát jól mutatja, hogy több, modern, felhőalapú open source alkalmazás is ezen a nyelven készült, köztük a Kubernetes, a Docker, az Istio, vagy a StorageOS, de meg lehet említeni a Salesforce-t is, akik a Python helyett ma már a Go-t használják a saját analitikai platformjukhoz -összegezte Tamás.

Ha felkeltette az érdeklődésedet a Go nyelv és a hasonló, előremutató technológiák, jelentkezz az Adevinta Hungary-hez backend fejlesztőnek!

[Az Adevinta Hungary megbízásából készített, fizetett anyag.]

Dübörög a HWSW free! meetupsorozat, novemberben modern webfejlesztés és CI/CD témákkal jövünk, de indulnak új online képzéseink is, melyek az AWS, a Kubernetes security, és a microservice architektúra alapjaiba nyújtanak betekintést.

a címlapról

Hirdetés

Ráléptünk a gázra!

2021. október 25. 02:56

Dübörög a HWSW free! meetupsorozat, novemberben modern webfejlesztés és CI/CD témákkal jövünk, de indulnak új online képzéseink is, melyek az AWS, a Kubernetes security, és a microservice architektúra alapjaiba nyújtanak betekintést.