GoSuda

5 konštrukčných vlastností jazyka Go z pohľadu systémového a backendového inžinierstva

By Rabbit Princess views ...

Úvod

Programovacie jazyky sú nástrojmi na vytváranie produktov. Samotné používanie konkrétneho jazyka však nerozhoduje o tom, aká je úroveň vývojára. Výber jazyka a spôsob, akým ho používame, môžu mať priamy vplyv na myslenie vývojára a smer jeho profesijného rastu. Najmä porovnávanie jazyka, ktorý používame, s inými jazykmi výrazne prispieva k rozšíreniu technického rozhľadu a k rozvoju citu pre podstatu vecí. V tomto článku sa pokúsim rozdeliť na päť aspektov to, prečo som si vybral Go a v čom pomáha rastu vývojára.

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

Existuje nespočetné množstvo programovacích jazykov a každý z nich má svoje silné a slabé stránky podľa svojich vlastností.

  • C ponúka vynikajúci výkon a nízkoúrovňové riadenie, no pamäť musí spravovať vývojár sám a nedostatok vysokoúrovňových funkcií znižuje produktivitu a sťažuje údržbu.
  • C++ a Rust podporujú rôzne pokročilé funkcie, ako sú objektovo orientované programovanie, šablóny a metaprogramovanie, no ich syntax je zložitá, krivka učenia je strmá a pomalá kompilácia nie je vhodná na časté nasadzovanie.
  • Java a C# zabezpečujú nezávislosť od platformy a stabilitu, a preto sa široko používajú vo veľkých službách, no spúšťajú sa vo ťažkom virtuálnom stroji, takže nasadenie a prostredie na spustenie sú zložité a nároky na zdroje sú vysoké.
  • Python a JavaScript sú vhodné na rýchly vývoj vďaka stručnej syntaxi a bohatému ekosystému, no ich výkon pri spúšťaní je nižší a dôveryhodnosť ekosystému je menšia, takže v rozsiahlych systémoch sa prejavujú štrukturálne obmedzenia.

Na druhej strane, Golang je jazyk, ktorý dosahuje výborné vyváženie medzi výkonom a produktivitou. Go je kompilovaný jazyk ako C, a preto zaručuje vysoký výkon pri spúšťaní, pričom vďaka rýchlej kompilácii ponúka nasadzovaciu flexibilitu na úrovni interpretovaných jazykov. Inými slovami, Go je vyvážený jazyk, ktorý možno spoľahlivo používať vo väčšine prostredí bez výrazných nedostatkov.

2. Go bráni programovaniu kargo kultu.

Počas druhej svetovej vojny postavili spojenecké sily na tichomorskom ostrove leteckú základňu, aby podporili vojnu. Veľké množstvo zásob a vojenskej techniky výrazne zmenilo život vojakov aj domorodcov. Obyvatelia prvýkrát videli lietadlá, ktoré prinášali odevy vyrobené v továrňach, konzervované potraviny a iný tovar. Keď vojna skončila, základňa bola opustená a tovar už neprichádzal. Ostrovania sa preto snažili napodobniť vojakov: obliekli sa ako riadiaci letovej prevádzky, vojaci alebo námorníci, vytvorili niečo podobné dráhe a palicami vysielali pristávacie signály lietadlám. Pochodovali aj preto, aby z lietadiel padal tovar na padákoch. Lietadlo, na ktoré čakali, však neprišlo.

Programovanie kargo kultu označuje vývojárske návyky, pri ktorých sa napodobňuje iba vonkajšia podoba kódu alebo technológie bez pochopenia ich princípov. V modernom vývoji, najmä vo webovom vývoji, sa takéto návyky, pri ktorých sa nechápe ich význam, objavujú často. Frameworky ako React, Next, Spring alebo Django umožnili vyvíjať bez znalosti ich vnútornej štruktúry, no mnohí vývojári si často nevedia poradiť ani s malou chybou. K tomu sa v poslednej dobe pridávajú nástroje na generovanie kódu pomocou AI, vďaka čomu sa čoraz viac rozširuje spôsob vývoja, pri ktorom sa výsledky len kopírujú a vkladajú namiesto toho, aby sa kód písal vlastnou rukou alebo sa chápali princípy jeho fungovania.

Go tento problém na úrovni jazykovej filozofie zásadne odmieta. Go je jazyk navrhnutý s dôrazom na štandardnú knižnicu, nie na frameworky. Vývojár dokáže pomocou základných knižníc, ako sú net/http a database/sql, vytvoriť webový server na úrovni reálnej služby, a tým si prirodzene vytvára intuíciu a porozumenie nízkoúrovňovým štruktúram, ako sú sieť, databázy a I/O. Takáto štruktúra, ktorá umožňuje osvojiť si základy pevne a bez závislosti od frameworkov, tvorí základ pre to, aby vývojár nestratil podstatu technológie a mohol sa nepretržite rozvíjať.

3. Go poskytuje silný model súbežnosti.

Moderné procesory sa nevyvíjajú smerom k zvyšovaniu rýchlosti jedného jadra, ale skôr k zvyšovaniu výkonu paralelným využívaním viacerých jadier. Preto sa súbežnosť, teda schopnosť programu spracovávať viacero úloh naraz, stala nevyhnutnou a rastie význam jazykov, ktoré ju dokážu efektívne navrhnúť a implementovať. Go je jazyk optimalizovaný pre toto prostredie. Goroutine je ľahké vlákno poskytované jazykom Go, ktoré možno vytvoriť len s zásobníkom v rozsahu niekoľkých KB, a aj keď beží tisíce goroutín naraz, takmer nespotrebúva systémové zdroje. Runtime jazyka Go prostredníctvom vlastného plánovača M:N efektívne rozdeľuje mnohé goroutine medzi vlákna operačného systému, pričom tento proces sa optimalizuje automaticky bez priameho zásahu vývojára. Vďaka tomu môže vývojár navrhovať logiku súbežnosti bezpečným a konzistentným spôsobom bez zložitej synchronizačnej logiky alebo vlastného plánovania.

Go ďalej aktívne podporuje moderný návrh súbežnosti pomocou synchronizačných nástrojov, ako sú mutex a waitGroup, a pomocou channel a context. Vďaka tejto štruktúre si vývojár môže prirodzene osvojiť praktický cit pre súbežnosť a paralelizmus bez toho, aby sa musel zaťažovať zložitou teóriou, a dosiahnuť vysokú úroveň abstrakcie a schopnosť návrhu použiteľnú v praxi.

4. Go je jazyk, ktorý vytvorili vynikajúci vývojári a ktorý si udržiava rovnováhu.

Go vzniklo pod vedením legendárnych vývojárov Roberta Griesemera, Roba Pikea a Kena Thompsona z Googlu. Títo ľudia sú najmä tvorcami systému Unix a jazyka C, ako aj majstrami v oblasti kompilátorov a systémového softvéru, a sami osebe dokazujú technickú dôveryhodnosť jazyka Go. K tomu sa pridali praktické skúsenosti a know-how z prevádzky rozsiahlych služieb od mnohých inžinierov Googlu, vďaka čomu sa Go od začiatku orientuje na riešenie reálnych problémov a vyvíja sa s konzistentnou filozofiou a jasným smerom.

Iné jazyky často spôsobujú zmätok v komunite a medzi používateľmi kvôli nekompatibilite, zmenám návrhu, nestabilným licenciám a nestandardizovanému ekosystému. Napríklad Python sa v dôsledku nekompatibility medzi verziami 2 a 3 roky rozdeľoval na dva ekosystémy a Java po prevzatí spoločnosťou Oracle čelila nestabilným licenčným podmienkam, kvôli ktorým firmy čoraz častejšie váhali s jej zavedením. Node.js navyše stále nedokáže poskytnúť konzistentný modulový systém, pretože CJS a ESM koexistujú.

Naproti tomu Go je jazyk, ktorý považuje konzistentnosť a stabilitu za svoju najvyššiu hodnotu. Tím Go dôsledne zachováva spätnú kompatibilitu a pri zavádzaní nových funkcií trvá na postupnej integrácii tak, aby nekolidovali so существующим kódom. Syntax sa tiež vyhýba zbytočným kľúčovým slovám a obmedzuje nadmernú abstrakciu, čím zabraňuje tomu, aby sa jazyk zbytočne skomplikoval. Okrem toho jednotný oficiálny nástrojový reťazec, ako sú go fmt, go mod, go build a go test, podporuje, aby všetky projekty v Go mali rovnaké vývojárske prostredie a štruktúru, a silná a praktická štandardná knižnica bez akéhokoľvek ďalšieho frameworku spoľahlivo pokrýva väčšinu funkcií potrebných v reálnom vývoji, ako sú webové servery, spracovanie súborov a práca s databázami.

5. Gopher je rozkošný.

Gopher1

Gopher2

Gopher3