Ako populárny je jazyk Go? Zahraničné krajiny ako Google, AWS, Cloudflare, CoreOS a ďalšie, ako aj domáce spoločnosti ako Qiniu a Alibaba, začali používať jazyk Go na vývoj svojich produktov súvisiacich s cloud computingom vo veľkom rozsahu. Na aké áno a ale by som si mal dávať pozor pri používaní jazyka Go? Nedávno sme napísali API pomocou jazyka Go, open-source programovacieho jazyka, ktorý Google spustil v roku 2009. Počas používania Go na vývoj sme získali veľa skúseností a skúseností, ktoré chceme zdieľať s čitateľmi, preto máme tento článok.
Pri výbere programovacieho jazyka pre projekt vždy odporúčame najskôr pochopiť, na čom bude projekt postavený, ešte predtým, než zvážime, na ktorom programovacom jazyku stavať. Nech je produkt rozhodujúcim faktorom, ako by mal byť postavený.
Tu je niekoľko výhod a nevýhod, ktoré sme zistili pri vývoji v Go, aby ste pochopili, či je vhodný pre váš ďalší projekt.
Čo milujeme na Go
Používanie jazyka Go v posledných rokoch prudko vzrástlo. Zdá sa, že každý startup ho používa na backendové systémy. Existuje mnoho dôvodov, prečo ho vývojári považujú za taký populárny.
Jazyk Go je veľmi rýchly
Go je veľmi rýchly programovací jazyk. Keďže Go je kompilovaný do strojového kódu, prirodzene prekonáva programovacie jazyky, ktoré sú interpretatívne alebo majú virtuálny runtime. Programy v Go sa tiež veľmi rýchlo kompilujú a vytvárajú veľmi malé binárne súbory. Naše API sa skompiluje za pár sekúnd, čo vedie k spustiteľnému súboru s veľkosťou len 11,5 MB.
Jednoduché na zvládnutie
Syntax jazyka Go je jednoduchá a ľahko pochopiteľná v porovnaní s inými jazykmi. Väčšinu syntaxe Go si môžeš zapamätať v hlave, takže nemusíš tráviť veľa času hľadaním vecí. Jazyk Go je tiež veľmi čistý a ľahko čitateľný. Programátori, ktorí nepoužívajú Go, najmä tí, ktorí sú zvyknutí na syntax v štýle C, dokážu čítať programový kód Go a rozumieť tomu, čo sa deje.
Statický jazyk definície typov
Go je výkonný statický jazyk na definovanie typu. Existujú základné typy ako int, byte a string. Existujú aj typy stavieb. Rovnako ako pri každom silne typovanom jazyku, typový systém umožňuje kompilátoru pomôcť zachytiť chyby pre celú triedu. Jazyk Go má tiež zabudované typy zoznamov a mapovania, ktoré sú tiež jednoduché na používanie.
Typ rozhrania
Jazyk Go má typy rozhraní a akákoľvek štruktúra môže jednoducho uspokojiť rozhranie implementáciou rozhrania. To vám umožní oddeliť závislosti vo vašom kóde. Potom môžete simulovať svoje závislosti vo svojich testoch. Použitím rozhraní môžete písať modulárnejší, testovateľný kód. Jazyk Go má tiež prvotriedne funkcie, čo umožňuje vývojárom písať kód praktickejším spôsobom.
Štandardná knižnica
Jazyk Go má celkom dobrú štandardnú knižnicu. Poskytuje pohodlné vstavané funkcie na spracovanie základných typov. Niektoré balíky uľahčujú vytvorenie webového servera, spracovanie I/O, šifrovanie a manipuláciu so surovými bajtmi. JSON serializácia a deserializácia poskytovaná štandardnou knižnicou je veľmi jednoduchá. Použitím "tags" môžete špecifikovať názov JSON poľa vedľa poľa struct.
Podpora testovania
Podpora testovania je zabudovaná v štandardnej knižnici a nevyžaduje žiadne ďalšie závislosti. Ak máte súbor s názvom thing.go, napíšte testy do iného súboru s názvom thing_test.go a spustite "go test". Go tieto testy vykoná rýchlo.
Nástroje na statickú analýzu
Nástroje na statickú analýzu pre jazyk Go sú početné a výkonné. Jedným konkrétnym nástrojom je gofmt, ktorý formátuje kód podľa štýlu navrhnutého Go. To môže normalizovať mnohé názory projektu, čo umožňuje manažérovi tímových ocenení sústrediť sa na prácu, ktorú kód vykonal. Na každej zostave používame gofmt, golint a vet, a ak nájdeme nejaké varovania, zostava zlyhá.
Zber odpadu
Pri navrhovaní jazyka Go bola správa pamäte zámerne navrhnutá tak, aby bola jednoduchšia než v C a C++. Objektom dynamickej alokácie je garbage collection. Jazyk Go robí používanie ukazovateľa bezpečnejším, pretože neumožňuje operácie s ukazovateľom. K dispozícii je aj možnosť použiť typy hodnôt.
Jednoduchší model súbežnosti
Hoci súbežné programovanie nikdy nie je jednoduché, Go sa programuje súbežne jednoduchšie ako iné jazyky. Vytvorenie ľahkého vlákna nazývaného "goroutine" a komunikácia s ním cez "kanál" je takmer jednoduchá úloha, ale je to možné aj pri zložitejších modeloch.
Čo sa nám na Go nepáči
Ako sme už spomínali, Go je naozaj vynikajúci jazyk. Má čistú syntax a rýchlo sa vykonáva. Má tiež mnoho výhod. Ale celý programovací jazyk neodkazuje len na jeho syntax. Tu sú niektoré z problémov, na ktoré sme narazili.
Neexistujú žiadne generiká
Po prvé, tento problém, ako slon v miestnosti, je zrejmý a prehliadaný fakt. V jazyku Go neexistujú žiadne generiká. Pre vývojárov z jazykov ako Java je prechod na Go veľkou prekážkou. To znamená, že úroveň opätovného použitia kódu je znížená. Hoci jazyk Go má prvotriedne funkcie, ak napíšete funkcie ako "map", "reduce" a "filter", ktoré sú navrhnuté na prácu s jedným typom kolekcie, nemôžete tieto funkcie použiť pre iné rôzne typy kolekcií. Existuje mnoho spôsobov, ako tento problém vyriešiť, ale všetky nakoniec napíšu viac kódu, čo znižuje produktivitu a udržateľnosť.
Rozhranie je implicitné
Aj keď je príjemné mať rozhrania, štruktúra implementuje rozhrania implicitne, nie explicitne. Hovorí sa, že je to jedna zo silných stránok jazyka Go, ale bolo pre nás ťažké z štruktúry určiť, či implementuje rozhrania alebo nie. Naozaj to pochopíte len tým, že sa pokúsite program skompilovať. Ak je program malý, určite na tom nie je nič zlé. Ale ak je tento program stredného až veľkého rozsahu, problém je veľký.
Slabá podpora knižníc
Podpora knižnice Go je nerovnomerná. Naše API sa integruje s Contentful, ale ten nemá oficiálne podporované Go SDK. To znamená, že musíme písať (a udržiavať!) Veľa kódu na požiadavky a spracovanie dát v Contentful. Musíme sa tiež spoliehať na knižnice Elasticsearch tretích strán. Go SDK poskytované dodávateľmi nie sú také populárne ako ich Java, Ruby alebo JavaScript náprotivky.
Komunikácia s komunitou je náročná
Komunita Go nemusí prijímať návrhy. Zvážte toto v GitHub repozitári golinta:Prihlásenie na hypertextový odkaz je viditeľné., používateľ požiadal, aby Golint dokázal zlyhať pri zostavení po objavení varovania (čo je to, čo robíme v projekte). Obhajcovia túto myšlienku okamžite odmietli. Avšak, keďže sa k problému vyjadrilo príliš veľa ľudí, po roku museli správcovia nakoniec pridať požadované funkcie.
Komunita Go tiež zjavne nemá rada webové frameworky. Hoci HTTP knižnica jazyka Go pokrýva mnoho aspektov, nepodporuje parametre ciest, kontrolu vstupov ani validáciu, ani nepodporuje priečne otázky bežné vo webových aplikáciách. Ruby vývojári majú Rails, Java vývojári majú Spring MVC a Python vývojári Django. Mnohí vývojári Go sa však rozhodnú frameworkom vyhýbať. Realita je však taká, že rámce neexistujú, naopak, je ich veľa. Ale keď začnete používať rámec pre projekt, je takmer nemožné vyhnúť sa osudu opustenia.
Roztrieštené riadenie závislostí
Dlhý čas nemal jazyk Go stabilného, formálneho správcu balíkov. Po rokoch žiadenia komunity projekt Go nedávno vydal Godep. Predtým už existovalo mnoho nástrojov na zaplnenie tejto medzery. V našom projekte používame veľmi silného govendora, ale to znamená, že komunita je rozdelená, čo môže byť veľmi mätúce pre vývojárov, ktorí sú v jazyku Go noví. Okrem toho takmer všetky správcovia balíkov sú poháňané Git repozitáriami a história Git repozitárov sa môže kedykoľvek zmeniť. Porovnajte to s Maven Central, ktorý nikdy nevymaže ani nemení knižnice, na ktorých váš projekt závisí.
Rozhodnite sa, či použijete Go alebo nie
Niekedy je potrebné myslieť na stroj. Keď posielate a prijímate bajty. Keď spravujete tisíce súbežných procesov. Môžete tiež písať operačný systém, kontajnerový systém alebo blockchainový uzol. V týchto prípadoch vám pravdepodobne generiká nebudú vadiť. Pretože ste zaneprázdnení tým, že z čipu vytláčate výkon za nanosekundu.
Avšak často je potrebné myslieť na ľudí. Dáta z oblasti podnikania, s ktorými potrebujete pracovať: zákazníci, zamestnanci, produkty, objednávky. Musíte napísať obchodnú logiku, ktorá funguje na týchto doménových entitách, a túto logiku musíte udržiavať mnoho rokov. A musí sa vysporiadať s meniacimi sa potrebami, a čím rýchlejšie, tým lepšie. V týchto prípadoch je dôležitá skúsenosť vývojára.
Go je programovací jazyk, ktorý si viac cení strojový čas než ľudský čas. Niekedy je vo vašom odbore najdôležitejší výkon stroja alebo programu. V týchto prípadoch môže byť Go dobrou alternatívou k C alebo C++. Ale keď píšete typickú n-tier aplikáciu, často vznikajú výkonnostné úzke miesta v databáze a, čo je dôležitejšie, v tom, ako dáta modelujete.
Pri rozhodovaní, či použiť jazyk Go, zvážte nasledujúce pravidlá:
- Ak pracuješ s bajtmi, jazyk Go môže byť dobrá voľba.
- Ak pracujete s dátami, jazyk Go nemusí byť dobrá voľba.
To sa môže jedného dňa v budúcnosti zmeniť. Jazyk a komunita Go sú stále mladé. Môžu nás prekvapiť pridaním generík; Alebo populárny webový framework výrazne vyhrá. Zatiaľ však zostaneme pri zrelých programovacích jazykoch s univerzálnou podporou, zrelým riadením závislostí a zameraním na modelovanie obchodných domén.
|