GoSuda

Pět návrhových rysů jazyka Go z pohledu systémového a backendového inženýrství

By Rabbit Princess views ...

Úvod

Programovací jazyky jsou nástroje pro vytváření produktů. Pouhé používání určitého jazyka ještě neurčuje úroveň vývojáře. Volba jazyka a způsob, jakým jej používáme, však může přímo ovlivnit způsob myšlení vývojáře a směr jeho profesního růstu. Zejména srovnání současně používaného jazyka s jinými jazyky výrazně napomáhá rozšiřovat technický rozhled a rozvíjet citlivost k podstatě věci. V tomto článku bych rád popsal, proč jsem si vybral Go a v jakých ohledech podporuje růst vývojáře, a to ve pěti oblastech.

1. Go je jazyk, který vyvažuje výkon a produktivitu.

Existuje nespočet programovacích jazyků a každý z nich má své silné a slabé stránky podle svých vlastností.

  • C nabízí vynikající výkon a nízkoúrovňové řízení, avšak správu paměti musí vývojář provádět ručně, a protože postrádá vysokoúrovňové funkce, je jeho produktivita nízká a údržba obtížná.
  • C++ a Rust podporují pokročilé funkce, jako jsou objektově orientované programování, šablony a metaprogramování, avšak jejich syntaxe je složitá, křivka učení strmá a pomalá kompilace nevhodná pro opakované nasazování.
  • Java a C# poskytují nezávislost na platformě a stabilitu, a proto se široce využívají ve velkých službách, avšak běží na těžkých virtuálních strojích, takže nasazení a prostředí pro běh jsou složité a nároky na zdroje jsou vysoké.
  • Python a JavaScript jsou díky stručné syntaxi a bohatému ekosystému vhodné pro rychlý vývoj, avšak jejich výkon za běhu je nižší a důvěryhodnost ekosystému slabší, takže ve velkých systémech se projeví strukturální omezení.

Naproti tomu Golang je jazyk, který dosahuje výborné rovnováhy mezi výkonem a produktivitou. Go je kompilovaný jazyk jako C, a proto zaručuje vysoký výkon za běhu, zároveň však díky rychlé kompilaci nabízí flexibilitu nasazení na úrovni interpretovaných jazyků. Go je tedy vyvážený jazyk, který lze spolehlivě používat ve většině prostředí bez výrazných nevýhod.

2. Go brání kargo kultovnímu programování.

Během druhé světové války vybudovala spojenecká letectva na tichomořských ostrovech letecké základny, aby podpořila válečné úsilí. Velké množství zásob a vojenského vybavení zásadně změnilo životy vojáků i domorodého obyvatelstva. Obyvatelé poprvé viděli, jak letadla přivážejí oblečení, konzervované potraviny a další zboží. Když válka skončila, základny byly opuštěny a náklad přestal přicházet. Ostrované proto začali napodobovat vojáky: oblékli se jako řídící letového provozu, vojáci nebo námořníci, vytvořili na zemi něco podobného dráze a holemi vysílali letadlům signály k přistání. Pokračovali v pochodech, aby se náklad snesl z letadel na padácích. Letadla, na která čekali, však nikdy nedorazila.

Kargo kultovní programování označuje návyk vývojářů napodobovat pouze vnější podobu kódu nebo technologie, aniž by pochopili jejich princip. U současných vývojářů, zejména v oblasti webového vývoje, se takový návyk bez porozumění významu často objevuje. Díky frameworkům, jako jsou React, Next, Spring nebo Django, lze vyvíjet i bez znalosti jejich vnitřní struktury, avšak při sebemenší chybě se vývojáři často nedokážou správně vypořádat. K tomu se nyní přidávají nástroje pro generování kódu pomocí AI, a způsob vývoje, při němž se spíše než psaní kódu nebo pochopení principů pouze kopírují a vkládají výsledky, se tak stále více rozšiřuje.

Go tento problém na úrovni jazykové filozofie zásadně odmítá. Go je jazyk navržený s důrazem na standardní knihovnu, nikoli na frameworky. Vývojář může pouze se základními knihovnami, jako jsou net/http a database/sql, vytvořit webový server na úrovni reálné služby a díky tomu přirozeně rozvíjí intuici a porozumění nízkoúrovňovým strukturám, jako jsou síť, databáze a I/O. Tato struktura, která umožňuje osvojit si základy pevně a bez závislosti na frameworcích, tvoří základ, na němž může vývojář neustále růst a neztratit podstatu technologie.

3. Go poskytuje silný model souběžnosti.

Moderní procesory se nevyvíjejí zvyšováním rychlosti jednoho jádra, ale spíše využitím více jader paralelně k zvyšování výkonu. V souladu s tím se souběžnost, tedy schopnost programu zpracovávat více úloh současně, stala nezbytnou a význam jazyků, které ji dokážou efektivně navrhnout a implementovat, stále roste. Go je jazyk optimalizovaný pro toto prostředí. Goroutine je lehké vlákno, které Go poskytuje; lze ji vytvořit pouze s zásobníkem o velikosti několika KB a i při spuštění tisíců goroutin prakticky nezatěžuje systémové zdroje. Běhové prostředí Go prostřednictvím vlastního plánovače M:N efektivně rozděluje mnoho goroutin mezi vlákna operačního systému, přičemž tento proces je automaticky optimalizován bez přímého zásahu vývojáře. Díky tomu může vývojář navrhovat logiku souběžnosti bezpečným a konzistentním způsobem, aniž by musel řešit složitou synchronizaci nebo vlastní plánování.

Go dále aktivně podporuje moderní návrh souběžnosti pomocí synchronizačních nástrojů, jako jsou mutex a waitGroup, a také pomocí channel a context. Díky této struktuře se vývojář může bez zbytečného ulpívání na složité teorii přirozeně naučit praktický cit pro souběžnost a paralelismus a dosáhnout vysoké úrovně abstrakce a návrhových schopností, které lze využít od samého začátku.

4. Go je jazyk, který vytvořili vynikající vývojáři a který si drží svůj směr.

Go vzniklo v Googlu pod vedením legendárních vývojářů Roberta Griesemera, Roba Pikea a Kena Thompsona. Zejména tito lidé jsou tvůrci Unixu a jazyka C, a také velmi uznávanými odborníky na překladače a systémový software, a sami o sobě tak dokládají technickou důvěryhodnost Go. K tomu se přidaly praktické zkušenosti mnoha inženýrů Googlu a know-how z provozu rozsáhlých služeb, takže Go od počátku směřuje k řešení reálných problémů a vyvíjí se se soudržnou filozofií a jasným směrem.

Jiné jazyky často způsobují zmatek mezi komunitou a uživateli kvůli nekompatibilním změnám, změnám návrhu, nestabilním licenčním podmínkám nebo nestandardizovanému ekosystému. Například Python se kvůli nekompatibilitě mezi verzemi 2 a 3 řadu let rozdělil na dva ekosystémy, a Java se po převzetí společností Oracle stala kvůli nestabilním licenčním pravidlům pro podniky méně přitažlivou. Node.js dodnes nedokáže nabídnout jednotný modulový systém, protože v něm koexistují CJS a ESM.

Naproti tomu Go klade na první místo konzistenci a stabilitu. Tým Go důsledně udržuje zpětnou kompatibilitu a při zavádění nových funkcí trvá na postupné integraci tak, aby nekolidovaly se stávajícím kódem. Syntaxe se rovněž vyhýbá zbytečným klíčovým slovům a omezuje nadměrnou abstrakci, čímž brání tomu, aby se jazyk sám od sebe zbytečně zkomplikoval. Dále jednotný oficiální nástrojový řetězec, jako jsou go fmt, go mod, go build a go test, vede všechny projekty v Go k jednotnému vývojovému prostředí a struktuře. Silná a praktická standardní knihovna pak bez nutnosti samostatných frameworků věrně podporuje většinu funkcí potřebných pro reálný vývoj, jako jsou webové servery, zpracování souborů a práce s databázemi.

5. Gopher je rozkošný.

Gopher1

Gopher2

Gopher3