Programovanie

Na čo je jazyk Go skutočne dobrý?

Počas svojich viac ako deviatich rokov divočiny sa jazyk Google Go, alias Golang - s verziou 1.13 vydanou v septembri 2019 - vyvinul z kuriozity pre alfa geekov, až sa stal programovacím jazykom testovaným na pozadí niektorých z najdôležitejších svetových aplikácií. cloudové projekty.

Prečo si vývojári takých projektov ako Docker a Kubernetes vybrali práve spoločnosť Go? Čo definuje Go, čím sa líši od ostatných programovacích jazykov a aké typy projektov sú najvhodnejšie na stavbu? V tomto článku sa pozrieme na množinu funkcií Go, optimálne prípady použitia, vynechania a obmedzenia jazyka a na to, odkiaľ bude Go pravdepodobne smerovať.

Jazyk Go je malý a jednoduchý

Go, alebo ako sa často hovorí Golang, vyvinuli zamestnanci spoločnosti Google - hlavne dlhoročný guru Unix a vynikajúci inžinier spoločnosti Google Rob Pike -, nejde však striktne o „projekt Google“. Go je skôr vyvíjaný ako komunitne vedený projekt s otvoreným zdrojovým kódom, vedený vedením, ktoré má vyhranené názory na to, ako by sa mal Go používať a akým smerom by sa mal uberať jazyk.

Go je určený na jednoduché učenie, priamu prácu s ním a ľahké na čítanie ostatnými vývojármi. Go nemá veľkú sadu funkcií, najmä v porovnaní s jazykmi ako C ++. Go svojou syntaxou pripomína C, vďaka čomu sa dlhoroční vývojári jazyka C učia pomerne ľahko. To znamená, že veľa funkcií Go, najmä jeho súbežnosť a funkčné programovacie funkcie, sa vracajú k jazykom, ako je Erlang.

Ako jazyk typu C na vytváranie a udržiavanie multiplatformných podnikových aplikácií všetkého druhu má Go veľa spoločného s jazykom Java. A ako prostriedok umožňujúci rýchly vývoj kódu, ktorý by mohol bežať kdekoľvek, by ste mohli nakresliť paralelu medzi Go a Python, aj keď rozdiely sú oveľa väčšie ako podobnosti.

Jazyk Go má pre každého niečo

Dokumentácia Go popisuje Go ako „rýchly, kompilovaný jazyk so statickým typom, ktorý sa cíti ako dynamicky písaný a interpretovaný jazyk.“ Aj veľký program Go sa zostaví v priebehu niekoľkých sekúnd. Go sa navyše vyhýba veľkej časti režijných nákladov na súbory a knižnice v štýle C.

Go uľahčuje vývojárom život rôznymi spôsobmi:

  • Pohodlie. Go bol porovnávaný so skriptovacími jazykmi ako Python, pokiaľ ide o schopnosť uspokojiť mnoho bežných programovacích potrieb. Niektoré z týchto funkcií sú zabudované do samotného jazyka, napríklad „goroutines“ pre súbežnosť a postupnosť vlákien, zatiaľ čo ďalšie možnosti sú k dispozícii v štandardných knižničných balíkoch Go, napríklad Go’s http package. Rovnako ako Python, aj Go poskytuje funkcie automatickej správy pamäte vrátane zberu odpadu.

    Na rozdiel od skriptovacích jazykov, ako je Python, sa kód Go kompiluje do rýchlo bežiaceho natívneho binárneho súboru. A na rozdiel od C alebo C ++ sa Go kompiluje extrémne rýchlo - dosť rýchlo na to, aby sa práca s Go cítila viac ako práca so skriptovacím jazykom ako s kompilovaným jazykom. Ďalej je Go build systém menej zložitý ako v iných kompilovaných jazykoch. Na vytvorenie a spustenie projektu Go je potrebných niekoľko krokov a malé účtovníctvo.

  • Rýchlosť. Go binárne súbory bežia pomalšie ako ich náprotivky C, ale rozdiel v rýchlosti je pre väčšinu aplikácií zanedbateľný. Výkon Go je pre drvivú väčšinu práce rovnako dobrý ako C a je všeobecne oveľa rýchlejší ako iné jazyky známe rýchlosťou vývoja (napr. JavaScript, Python a Ruby).
  • Prenosnosť Spustiteľné súbory vytvorené pomocou reťazca nástrojov Go môžu byť samostatné a bez predvolených externých závislostí. Sieť nástrojov Go je k dispozícii pre širokú škálu operačných systémov a hardvérových platforiem a dá sa použiť na kompiláciu binárnych súborov naprieč platformami.
  • Interoperabilita. Go poskytuje všetky vyššie uvedené možnosti bez toho, aby obetoval prístup k základnému systému. Programy Go môžu hovoriť s externými knižnicami C alebo uskutočňovať natívne systémové volania. Napríklad v Dockeri funguje rozhranie Magic s nízkoúrovňovými funkciami Linuxu, skupinami a mennými priestormi, aby fungovalo kúzlo kontajnera.
  • Podpora. Sieť nástrojov Go je voľne dostupná ako binárny systém Linux, MacOS alebo Windows alebo ako kontajner Docker. Go je štandardne zahrnutý v mnohých populárnych distribúciách Linuxu, ako sú Red Hat Enterprise Linux a Fedora, čo uľahčuje nasadenie zdroja Go na tieto platformy. Podpora Go je tiež silná v mnohých vývojových prostrediach tretích strán, od Microsoft Visual Studio Code po ActiveState ID Komodo.

Jazyk Where Go funguje najlepšie

Žiadny jazyk nie je vhodný pre každú prácu, ale niektoré jazyky sú vhodné pre viac pracovných miest ako iné.

Program Go svieti najjasnejšie pri vývoji nasledujúcich typov aplikácií:

  • Distribuované sieťové služby.Sieťové aplikácie žijú a zomierajú súbežne a natívne súbežné funkcie Go - predovšetkým goroutiny a kanály - sú na takúto prácu veľmi vhodné. Následkom toho je veľa projektov Go zameraných na prácu v sieti, distribuované funkcie a cloudové služby: API, webové servery, minimálne rámce pre webové aplikácie a podobne.
  • Cloudový natívny vývoj.Vďaka súbežným a sieťovým funkciám spoločnosti Go a vysokej miere prenosnosti je veľmi vhodný na vytváranie natívnych cloudových aplikácií. V skutočnosti bol Go použitý na vytvorenie niekoľkých základných kameňov cloudového natívneho výpočtového systému vrátane Dockeru, Kubernetes a Istio.
  • Náhrady za existujúcu infraštruktúru.Veľká časť softvéru, na ktorom sme závislí pre internetovú infraštruktúru, starne a prekonáva zneužitia. Prepisovanie takýchto vecí v Go poskytuje veľa výhod - lepšiu bezpečnosť pamäte, jednoduchšie nasadenie naprieč platformami a čistú kódovú základňu na podporu budúcej údržby. V serveri Go sa píše nový server SSH s názvom Teleport a nová verzia protokolu Network Time Protocol, ktoré sa ponúkajú ako náhrada za ich bežné náprotivky.
  • Obslužné programy a samostatné nástroje.Programy Go sa kompilujú do binárnych súborov s minimálnymi externými závislosťami. Vďaka tomu sú ideálne vhodné na vytváranie obslužných programov a iných nástrojov, pretože sa rýchlo spúšťajú a dajú sa ľahko zbaliť na ďalšiu distribúciu.

Choďte na jazykové obmedzenia

Goov súbor funkcií, ktorý Gous hodnotil, pritiahol chválu aj kritiku. Aplikácia Go je navrhnutá tak, aby chybovala okrem toho, že je malá a ľahko pochopiteľná, pričom niektoré funkcie sú zámerne vynechané. Výsledkom je, že niektoré funkcie, ktoré sú bežné v iných jazykoch, jednoducho nie sú v aplikácii Go zámerne k dispozícii.

Jednou z takýchto funkcií sú generiká, ktoré umožňujú funkcii prijímať mnoho rôznych typov premenných. Go nezahŕňa generické lieky a správcovia jazyka sú proti ich pridávaniu na základe toho, že generické prostriedky by ohrozili jednoduchosť jazyka. Toto obmedzenie je možné obísť, ale mnohých vývojárov stále mrzí, keď vidia, ako sa k Go pridávajú nejakým spôsobom generiká. Bol vznesený aspoň jeden návrh na implementáciu generík do Go, ale nič nebolo vytesané do kameňa.

Ďalším mínusom Go je veľkosť vygenerovaných binárnych súborov. Go binárne súbory sú štandardne staticky kompilované, čo znamená, že všetko potrebné za behu je obsiahnuté v binárnom obraze. Tento prístup zjednodušuje proces zostavovania a nasadenia, ale za cenu jednoduchého „Hello, world!“ s váhou okolo 1,5 MB v 64-bitovom systéme Windows. Tím Go pracuje na znížení veľkosti týchto binárnych súborov s každým ďalším vydaním. Je tiež možné zmenšiť binárne súbory Go pomocou kompresie alebo odstránením ladiacich informácií Go. Táto posledná možnosť môže fungovať lepšie pre samostatné distribuované aplikácie ako pre cloudové alebo sieťové služby, kde sú informácie o ladení užitočné, ak niektorá služba zlyhá.

Ešte ďalšiu vychvaľovanú vlastnosť Go, automatickú správu pamäte, je možné považovať za nevýhodu, pretože odvoz odpadu vyžaduje určité množstvo režijných nákladov na spracovanie. Podľa zámeru Go neposkytuje manuálnu správu pamäte a zhromažďovanie odpadu v Go bolo kritizované za to, že nerieši dobre druhy zaťaženia pamäte, ktoré sa objavujú v podnikových aplikáciách. Pozitívne je, že Go 1.8 prináša mnoho vylepšení správy pamäte a zberu odpadu, ktoré znižujú čas potrebný na oneskorenie. Vývojári Go majú samozrejme možnosť použiť manuálne pridelenie pamäte v prípone C alebo prostredníctvom knižnice manuálnej správy pamäte od iného výrobcu.

Kultúra softvéru okolo vytvárania bohatých grafických používateľských rozhraní pre aplikácie Go, napríklad v desktopových aplikáciách, je stále rozptýlená.

Väčšina aplikácií Go sú nástroje príkazového riadku alebo sieťové služby. To znamená, že rôzne projekty pracujú na tom, aby priniesli bohaté GUI pre aplikácie Go. Existujú väzby pre rámce GTK a GTK3. Ďalším projektom je poskytnúť platformové natívne používateľské rozhrania, aj keď sa spoliehajú na väzby C a nie sú napísané iba v čistom jazyku Go. Používatelia systému Windows si môžu vyskúšať chôdzu. Ale v tomto priestore sa neobjavil žiadny jasný víťaz alebo dlhodobá bezpečná stávka a niektoré projekty, napríklad pokus spoločnosti Google o vybudovanie knižnice grafického používateľského rozhrania pre rôzne platformy, išli bokom. Pretože je Go od návrhu nezávislý na platforme, je nepravdepodobné, že by sa niečo z toho stalo súčasťou štandardnej sady balíkov.

Aj keď Go dokáže hovoriť s natívnymi systémovými funkciami, nebol navrhnutý na vytváranie nízkoúrovňových systémových komponentov, ako sú jadrá alebo ovládače zariadení alebo vstavané systémy. Koniec koncov, runtime Go a garbage collector pre aplikácie Go závisia od základného OS. (Vývojári, ktorí sa zaujímajú o špičkový jazyk pre tento druh práce, by sa mohli pozrieť do jazyka Rust.)

Choďte na jazykové futures

Ďalšia fáza vývoja Go môže byť riadená skôr potrebami a potrebami jeho vývojárskej základne. Myslitelia spoločnosti Go menia jazyk tak, aby lepšie vyhovovali tomuto publiku, než aby boli vedení len tvrdohlavým príkladom. Inými slovami, Go môže získať funkcie, ktoré preň pôvodne neboli určené, ako napríklad generiká.

Je jasné, že vývojári z Golangu tieto veci chcú. Prieskum medzi používateľmi z roku 2018 Go umiestnil generické lieky medzi tri hlavné výzvy v spôsobe širšieho prijatia aplikácie Go spolu s lepšou závislosťou a správou balíkov. A existujúci návrh na GitHub pre generiká zostáva aktívny ako návrh pre Go 2.x. Takéto zmeny môžu spoločnosti Go pomôcť zaujať ústrednejšie miesto v podnikovom vývoji, kde v súčasnosti kraľujú Java, JavaScript a Python.

Aj bez väčších zmien môžeme očakávať väčšie využitie Go na projekty prestavby infraštruktúry, ako sú vyššie opísané náhrady za SSH a NTP, a ako súčasť viacjazyčných projektov.

Rozmohla sa tiež implementácia reťazca nástrojov Go od tretích strán. Program ActiveGate ActiveGate poskytuje komerčne podporované vydanie jazyka Go a projekty LLVM aj gccgo poskytujú voľne licencované open source implementácie programu Go prostredníctvom alternatívnych nástrojov.

Go nakoniec slúžil aj ako základňa pre vývoj úplne nových jazykov, aj keď dva príklady tohto aktívneho vývoja prestali. Jedným z príkladov bol jazyk Have, ktorý zjednodušil syntax Go, implementoval niektoré z rovnakých konceptov vlastným spôsobom a pre ľahšiu realizáciu sa transponoval do Go. Ďalší zaniknutý projekt Oden použil Go’s assembler a toolchain na zostavenie novo navrhnutého jazyka, ktorý sa inšpiroval jazykmi ako Lisp a Haskell.

Táto posledná sada projektov ilustruje jeden zo spôsobov, ako sa každá inovácia v oblasti IT stáva skutočne revolučnou - keď ju ľudia rozoberú a znovu použijú, nájdenie použitia, ktoré jej dizajnéri nikdy nemali v úmysle. Budúcnosť jazyka Go ako hackovateľného projektu sa ešte len začína. Jeho budúcnosť ako hlavného programovacieho jazyka je už ale zaistená, určite v cloude, kde rýchlosť a jednoduchosť Go uľahčujú vývoj škálovateľnej infraštruktúry, ktorá sa dá dlhodobo udržať.

$config[zx-auto] not found$config[zx-overlay] not found