GoSuda

Miért a Go nyelv?

By Rabbit Princess
views ...

Bevezetés

A programozási nyelvek eszközök a termékek létrehozásához. Egyszerűen az, hogy valaki milyen nyelvet használ, nem határozza meg a fejlesztő képességét. Azonban az, hogy milyen nyelvet választunk és hogyan kezeljük azt, közvetlen hatással lehet a fejlesztő gondolkodásmódjára és fejlődési irányára. Különösen a jelenleg használt nyelven túli más nyelvekkel való összehasonlítás jelentősen hozzájárulhat a technikai látókör kiszélesítéséhez és a lényeg iránti érzék fejlesztéséhez. Ebben a cikkben öt szempontból vizsgálom meg, miért választottam a Go-t, és hogyan segíti ez a fejlesztők fejlődését.

1. A Go egyensúlyt teremt a teljesítmény és a termelékenység között.

Számos programozási nyelv létezik a világon, és minden nyelvnek megvannak az előnyei és hátrányai a jellemzői alapján.

  • A C kiváló teljesítményt és alacsony szintű vezérlést tesz lehetővé, de a memória kezelését a fejlesztőnek kell elvégeznie, és hiányoznak belőle a magas szintű funkciók, ami alacsony termelékenységet és nehéz karbantarthatóságot eredményez.
  • A C++ és a Rust számos fejlett funkciót támogatnak, mint például az objektumorientált programozás, a template-ek és a metaprogramozás, de a szintaxisuk bonyolult, a tanulási görbéjük meredek, és a lassú fordítási sebességük miatt nem alkalmasak ismétlődő telepítésekre.
  • A Java és a C# platformfüggetlenséget és stabilitást biztosítanak, és széles körben használatosak nagyméretű szolgáltatásokhoz, de nehéz virtuális gépen futnak, ami bonyolult telepítési és futtatási környezetet, valamint magas erőforrásigényt eredményez.
  • A Python és a Javascript egyszerű szintaxisuk és gazdag ökoszisztémájuk miatt alkalmasak gyors fejlesztésre, de a futási teljesítményük gyenge, és az ökoszisztéma megbízhatósága alacsony, ami strukturális korlátokat tár fel nagyméretű rendszerekben.

Ezzel szemben a Golang kiváló egyensúlyt teremt a teljesítmény és a termelékenység között. Mivel a Go egy fordított nyelv, mint a C, magas futási teljesítményt garantál, miközben gyors fordítási sebességével az interpreter szintű telepítési rugalmasságot biztosít. Más szóval, a Go egy kiegyensúlyozott nyelv, amely a legtöbb környezetben stabilan használható, anélkül, hogy nyilvánvaló hátrányokkal rendelkezne.

2. A Go megakadályozza a cargo kultusz programozást.

A második világháború alatt a szövetséges erők légibázisokat építettek a csendes-óceáni szigeteken, hogy segítsék a háborút. A nagymennyiségű ellátmány és katonai felszerelés támogatása nagymértékben megváltoztatta a katonák és a bennszülött lakosság életét. A lakosok először láttak repülőgépeket, amelyek gyártott ruhákat, konzerveket és egyéb cikkeket szállítottak. A háború befejeztével a bázisokat elhagyták, és a rakomány már nem érkezett meg. Ezért a szigetlakók utánozni kezdték a katonákat, légiforgalmi irányítóknak, katonáknak és tengerészeknek öltöztek, kifutópálya-szerű helyeket hoztak létre, és botokkal jelezték a repülőgépeknek a leszállást. Továbbra is felvonultak, hogy a repülőgépek ejtőernyővel dobjanak le rakományt. Azonban a várt repülőgépek nem érkeztek meg.

A cargo kultusz programozás olyan fejlesztői szokásra utal, amikor valaki anélkül utánozza a kód vagy a technológia külső megjelenését, hogy megértené annak alapelveit. A modern fejlesztők, különösen a webfejlesztés területén, gyakran követik ezt a szokást, anélkül, hogy értenék a mögöttes jelentést. A React, Next, Spring, Django keretrendszereknek köszönhetően a fejlesztés anélkül is lehetségessé vált, hogy ismernénk a belső szerkezetet, de gyakran előfordul, hogy még egy apró hibára sem tudnak megfelelően reagálni. A közelmúltban az AI kódgeneráló eszközök megjelenésével még inkább elterjedt az a fejlesztési módszer, ahol a kód közvetlen megírása vagy az alapelvek megértése helyett csak másolják és beillesztik az eredményt.

A Go alapvetően elkerüli ezeket a problémákat a nyelvi filozófia szintjén. A Go nem keretrendszer-központú, hanem standard könyvtár-központú nyelv. A fejlesztők képesek valós szolgáltatási szintű webszervereket építeni pusztán alapvető könyvtárakkal, mint például a net/http és a database/sql, és ezáltal természetesen fejlesztik intuíciójukat és megértésüket az alacsony szintű struktúrákról, mint például a hálózat, az adatbázis és az I/O. Ez a keretrendszerektől való függetlenség és az alapoktól való szilárd tanulás felépítése alapot ad a fejlesztőknek ahhoz, hogy ne veszítsék el a technológia lényegét, és folyamatosan fejlődjenek.

3. A Go robusztus párhuzamossági modellt biztosít.

A modern CPU-k fejlődése ahelyett, hogy az egyetlen mag sebességét növelné, inkább több mag párhuzamos kihasználásával javítja a teljesítményt. Ennek megfelelően a párhuzamosság, azaz az a képesség, hogy egy program egyszerre több feladatot is képes kezelni, elengedhetetlenné vált, és egyre nő a nyelvek fontossága, amelyek hatékonyan képesek ezt megtervezni és megvalósítani. A Go egy olyan nyelv, amely optimalizálva van erre a környezetre. A goroutine-ok a Go által biztosított könnyű szálak, amelyek néhány KB-os stack-kel is létrehozhatók, és több ezer egyidejű futtatása esetén is alig fogyasztanak rendszererőforrásokat. A Go futási ideje saját M:N ütemezőjén keresztül hatékonyan osztja el a számos goroutine-t az operációs rendszer szálai között, és ez a folyamat automatikusan optimalizálódik anélkül, hogy a fejlesztőnek közvetlenül be kellene avatkoznia. Ez lehetővé teszi a fejlesztők számára, hogy biztonságos és konzisztens módon tervezzenek párhuzamossági logikát, bonyolult szinkronizációs logikák vagy egyéni ütemezés nélkül.

Ezenkívül a Go aktívan támogatja a modern párhuzamossági tervezést mutex, waitGroup típusú szinkronizációs eszközökkel, valamint channel-ek és context-ek felhasználásával. Ennek a struktúrának köszönhetően a fejlesztők anélkül, hogy bonyolult elméletekbe bonyolódnának, természetes módon sajátíthatják el a párhuzamosság és a konkurens programozás gyakorlati érzékét, és a semmiből is elérhetik a használható, magas szintű absztrakciós és tervezési képességet.

4. A Go egy olyan nyelv, amelyet kiváló fejlesztők készítettek, és a középpontban tartották az alapokat.

A Go egy olyan nyelv, amelyet a Google és olyan legendás fejlesztők vezetésével hoztak létre, mint Robert Griesemer, Rob Pike és Ken Thompson. Különösen ők a Unix és a C nyelv megalkotói, valamint a fordítók és a rendszerprogramozás területének mesterei, ami önmagában is bizonyítja a Go technikai megbízhatóságát. Emellett számos Google mérnök gyakorlati tapasztalata és nagyméretű szolgáltatások üzemeltetési know-how-ja is beépült, így a Go a kezdetektől fogva a valós problémák megoldására törekedett, és konzisztens filozófiával és irányvonallal fejlődött.

Más nyelvek gyakran okoznak zavart a közösségben és a felhasználók körében a kompatibilitás megszakadása, a tervezés változásai, az instabil licencelés vagy a nem szabványos ökoszisztéma miatt. Például a Python 2 és 3 közötti kompatibilitás megszakadása évekig megosztotta az ökoszisztémát, a Java esetében pedig az Oracle általi felvásárlás után az instabil licencpolitika miatt egyre több vállalat kerüli a bevezetését. Ezenkívül a Node.js-ben még mindig együtt él a CJS és az ESM, és nem biztosít egységes modulrendszert.

Ezzel szemben a Go egy olyan nyelv, amely a konzisztenciát és a stabilitást tekinti a legfőbb értéknek. A Go csapat szigorúan fenntartja a visszamenőleges kompatibilitást, és új funkciók bevezetésekor is ragaszkodik a fokozatos integrációhoz, hogy elkerülje a meglévő kóddal való ütközést. A szintaxis is kerüli a felesleges kulcsszavakat, és korlátozza a túlzott absztrakciót, megakadályozva, hogy maga a nyelv feleslegesen bonyolulttá váljon. Ezenkívül az egységes hivatalos eszközkészlet, mint a go fmt, go mod, go build, go test, minden Go projektet azonos fejlesztési környezet és struktúra felé terel, és az erőteljes és praktikus szabványos könyvtár a legtöbb valós fejlesztéshez szükséges funkciót hűen támogatja, mint például a webszerverek, fájlkezelés, adatbázis-integráció, anélkül, hogy külön keretrendszerre lenne szükség.

5. A Gopher aranyos.

Gopher1

Gopher2

Gopher3