Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 10198|Odpověď: 1

Výhody a nevýhody programování v Go

[Kopírovat odkaz]
Zveřejněno 27.05.2019 9:57:10 | | |
Jak populární je jazyk Go? Zahraniční země jako Google, AWS, Cloudflare, CoreOS atd., a domácí společnosti jako Qiniu a Alibaba začaly používat jazyk Go k vývoji svých produktů souvisejících s cloud computingem ve velkém měřítku. Na jaká ano, ale pravidla bych měl dávat pozor při používání jazyka Go?

Nedávno jsme napsali API pomocí jazyka Go, open-source programovacího jazyka spuštěného Googlem v roce 2009. Při používání Go pro vývoj jsme získali mnoho zkušeností a zkušeností a chceme se o ně podělit s čtenáři, proto máme tento článek.

Při výběru programovacího jazyka pro projekt vždy doporučujeme pochopit, na čem bude projekt stavět, než zvážime, na kterém programovacím jazyce stavět. Nechte produkt být rozhodujícím faktorem toho, jak by měl být postaven.

Zde jsou některé klady a zápory, které jsme při vývoji v Go zjistili, abyste pochopili, zda je to vhodné pro váš další projekt.

Co milujeme na Go

Používání jazyka Go v posledních letech explodovalo. Zdá se, že každý startup ho používá pro backendové systémy. Existuje mnoho důvodů, proč vývojáři považují tuto hru za tak populární.

Jazyk Go je velmi rychlý

Go je velmi rychlý programovací jazyk. Protože je Go kompilován do strojového kódu, přirozeně překonává programovací jazyky, které jsou interpretativní nebo mají virtuální runtime. Programy v Go také velmi rychle kompilují a vytvářejí velmi malé binární soubory. Naše API se zkompiluje během několika sekund, což vede k spustitelnému souboru o velikosti pouhých 11,5 MB.

Snadné na zvládnutí

Syntaxe jazyka Go je jednoduchá a snadno pochopitelná ve srovnání s jinými jazyky. Většinu syntaxe Go si můžete zapamatovat v hlavě, takže nemusíte trávit moc času hledáním věcí. Jazyk Go je také velmi čistý a snadno čitelný. Programátoři, kteří nepoužívají Go, zejména ti, kteří jsou zvyklí na syntaxi ve stylu C, dokážou číst programový kód Go a rozumět tomu, co se děje.

Statický jazyk pro definici typů

Go je výkonný statický jazyk pro definování typů. Existují základní typy jako int, byte a string. Existují také typy staveb. Stejně jako u každého silně typovaného jazyka umožňuje typový systém kompilátoru pomoci zachytit chyby pro celou třídu. Jazyk Go má také vestavěné typy seznamů a mapování, které jsou také snadno použitelné.

Typ rozhraní

Jazyk Go má typy rozhraní a jakákoli struktura může jednoduše uspokojit rozhraní implementací. To vám umožní oddělit závislosti ve vašem kódu. Pak můžete simulovat své závislosti ve svých testech. Použitím rozhraní můžete psát modulárnější, testovatelnější kód. Jazyk Go má také prvotřídní funkce, což umožňuje vývojářům psát kód praktičtějším způsobem.

Standardní knihovna

Jazyk Go má docela dobrou standardní knihovnu. Poskytuje pohodlné vestavěné funkce pro zpracování základních typů. Některé balíčky usnadňují sestavení webového serveru, zpracování I/O, použití šifrování a manipulaci se surovými bajty. JSON serializace a deserializace poskytovaná standardní knihovnou je velmi jednoduchá. Použitím "tagů" můžete zadat JSON pole vedle pole struct.

Podpora testování

Podpora testů je zabudovaná ve standardní knihovně a nevyžaduje žádné další závislosti. Pokud máte soubor s názvem thing.go, napište testy do jiného souboru jménem thing_test.go a spusťte "go test". Go tyto testy provede rychle.

Nástroje statické analýzy

Nástroje pro statickou analýzu jazyka Go jsou četné a výkonné. Jedním konkrétním nástrojem je gofmt, který formátuje kód podle stylu navrženého Go. To může normalizovat mnoho názorů na projekt a umožnit týmovému manažerovi ocenění soustředit se na práci, kterou kód odvedl. Na každé sestavení spouštíme gofmt, golint a vet, a pokud najdeme nějaká varování, sestava selže.

Sběr odpadu

Při návrhu jazyka Go byla správa paměti záměrně navržena tak, aby byla jednodušší než v C a C++. Cílem dynamické alokace je garbage collection. Jazyk Go činí používání ukazatele bezpečnějším, protože neumožňuje operace s ukazatelem. Je také k dispozici možnost použít typy hodnot.

Jednodušší model souběžnosti

Zatímco současné programování není nikdy snadné, Go se programuje současně snadněji než jiné jazyky. Vytvoření lehkého vlákna nazývaného "goroutine" a komunikace s ním přes "kanál" je téměř jednoduchý úkol, ale je možné i u složitějších modelů.

Co se nám na Go nelíbí

Jak jsme již dříve zmínili, Go je skutečně vynikající jazyk. Má čistou syntaxi a je rychlý na provedení. Má také mnoho výhod. Ale celý programovací jazyk se nevztahuje jen na jeho syntaxi. Zde jsou některé z problémů, na které jsme narazili.

Neexistují žádná generika

Za prvé, tento problém, jako slon v místnosti, je zřejmý a přehlížený fakt. V jazyce Go nejsou žádné generiká. Pro vývojáře z jazyků jako Java je přechod na Go obrovskou překážkou. To znamená, že úroveň opětovného použití kódu je snížena. Zatímco jazyk Go má prvotřídní funkce, pokud napíšete funkce jako "map", "reduce" a "filter", které jsou navrženy pro práci s jedním typem kolekce, nelze tyto funkce znovu použít pro jiné typy kolekcí. Existuje mnoho způsobů, jak tento problém vyřešit, ale všechny nakonec vedou k psaní více kódu, což snižuje produktivitu a udržovatelnost.

Rozhraní je implicitní

I když je příjemné mít rozhraní, struktura implementuje rozhraní implicitně, nikoli explicitně. Říká se, že to je jedna ze silných stránek jazyka Go, ale bylo pro nás obtížné ze struktury určit, zda implementuje rozhraní či nikoliv. Opravdu to pochopíte jen tím, že se pokusíte program zkompilovat. Pokud je program malý, rozhodně na tom není nic špatného. Ale pokud je tento program středně až velkorozměrný, problém je velký.

Špatná podpora knihoven

Podpora knihovny Go je nerovnoměrná. Naše API se integruje s Contentful, ale ten nemá oficiálně podporované Go SDK. To znamená, že musíme psát (a udržovat!) Hodně kódu na požadavek a analýzu dat v Contentful. Musíme se také spoléhat na knihovny třetích stran v Elasticsearch. SDK Go poskytovaná dodavateli nejsou tak populární jako jejich protějšky v Javě, Ruby nebo JavaScriptu.

Komunikace s komunitou je obtížná

Komunita Go nemusí přijímat návrhy. Zvažte toto v gitHub repozitáři golinta:Přihlášení k hypertextovému odkazu je viditelné., uživatel požádal, aby Golint mohl sestavení neúspěšně spustit, když najde varování (což je to, co v projektu děláme). Obhájci tuto myšlenku okamžitě zavrhli. Nicméně, protože se k problému vyjádřilo příliš mnoho lidí, po roce museli správci nakonec požadované funkce přidat.

Komunita Go se také zdá být neoblíbená v webových frameworkech. Ačkoliv HTTP knihovna jazyka Go pokrývá mnoho aspektů, nepodporuje parametry cesty, kontrolu vstupů a validaci, ani nepodporuje průřezové otázky běžné ve webových aplikacích. Vývojáři Ruby mají Rails, Java mají Spring MVC a Python vývojáři Django. Ale mnoho vývojářů Go se rozhodne frameworkům vyhýbat. Realita je však taková, že žádné rámce neexistují, naopak, je jich mnoho. Ale jakmile začnete framework používat pro projekt, je téměř nemožné vyhnout se osudu opuštění.

Správa rozfragmentovaných závislostí

Dlouhou dobu neměl jazyk Go stabilního, formálního správce balíčků. Po letech žebrání komunity projekt Go nedávno vydal Godep. Předtím už existovalo mnoho nástrojů, jak tuto mezeru zaplnit. V našem projektu používáme velmi výkonného govendora, ale to znamená, že komunita je rozdělená, což může být pro vývojáře, kteří jsou v jazyce Go noví, velmi matoucí. Navíc téměř všechny správce balíčků jsou poháněny Git repozitáři a historie Git repozitářů se může kdykoli změnit. Porovnejte to s Maven Central, který nikdy nemaže ani nemění knihovny, na kterých váš projekt závisí.

Rozhodněte se, jestli použijete Go nebo ne

Někdy je potřeba myslet na stroj. Když posíláte a přijímáte bajty. Když spravujete tisíce souběžných procesů. Můžete také psát operační systém, kontejnerový systém nebo blockchainový uzel. V těchto případech vás pravděpodobně generika nezajímají. Protože jste zaneprázdněni tím, že z čipu vymáčkujete výkon za nanosekundu.

Nicméně často je potřeba myslet na lidi. Data o obchodních oblastech, se kterými musíte pracovat: zákazníci, zaměstnanci, produkty, objednávky. Musíte napsat obchodní logiku, která funguje na těchto doménových entitách, a tuto logiku musíte udržovat po mnoho let. A musí se vypořádat s měnícími se potřebami, a čím rychleji, tím lépe. V těchto případech je důležitá zkušenost vývojáře.

Go je programovací jazyk, který si cení strojového času více než lidského času. Někdy je ve vašem oboru nejdůležitější výkon stroje nebo programu. V těchto případech může být Go dobrou alternativou k C nebo C++. Ale když píšete typickou n-tier aplikaci, často vznikají výkonnostní úzká místa v databázi a, co je důležitější, v tom, jak data modelujete.

Při rozhodování, zda použít jazyk Go, zvažte následující pravidla:

  • Pokud pracujete s bajty, pak by mohl být jazyk Go dobrou volbou.
  • Pokud pracujete s daty, pak jazyk Go nemusí být dobrá volba.


To se může jednou v budoucnu změnit. Jazyk a komunita Goů jsou stále mladé. Možná nás překvapí přidáním generik; Nebo populární webový framework výrazně vyhraje. Prozatím však zůstaneme u vyspělých programovacích jazyků s univerzální podporou, vyspělým řízením závislostí a zaměřením na modelování obchodních domén.





Předchozí:Konfigurace Common.LoggingLog
Další:c# discuz POST
Zveřejněno 27.05.2019 10:09:35 |
Ačkoliv jsem s jazykem Go moc nepřicházel, bylo to dobře napsané
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com