Když jsem se poprvé dozvěděl o Go, vlastním programovacím jazyku společnosti Google, zaujalo mě to. Go, alias Golang, byl navržen a vydán v roce 2007 a patřil k zástupu nových jazyků – Rust, D, Nim, Scala, Clojure -, které na začátku až v polovině roku 2010 vyvolávaly rozruch: V té době se zdálo, že programátoři touží po odklonu od mnohomluvnosti starších backendových jazyků (Java, C++) a výpočetní neefektivnosti a typové bezpečnosti dynamických jazyků používaných na webu (PHP, Ruby, Python). Chtěli typovou bezpečnost, což znamenalo, že chtěli statické typování. A chtěli rychlost.
Bylo snadné najít příběhy o startupech, jako je IronMQ, které přešly z desítek serverů používaných pro hostování Rails na pár, které mohly být hostovány v jazyce jako Go. A jako člověk, který byl v té době ponořen do PHP5 a všech jeho problémů, jsem se počítal do zástupu zájemců.
Když jsem se poprvé setkal s jazykem Go, ve své bývalé funkci technického ředitele ve společnosti ActiveCampaign, zkusil jsem v něm napsat nějaký kód. A nelíbilo se mi to. Dělalo mi to problémy, kdykoli jsem nechal nepoužitou proměnnou nebo importoval nepoužitý balíček. Go bylo obzvlášť přísné, co se týče typování – znal jsem typ coercion v PHP, ale byl jsem také zvyklý na C a C++, které umožňovaly míchat celá čísla se znaménkem a bez znaménka a také míchat velikosti celých čísel (16bitová, 32bitová, 64bitová).
Go nemělo generika. Ve skutečnosti jeden z jeho hlavních návrhářů (Rob Pike) poměrně ostře hovořil o tom, co jazyku chybí. Jak se Pike vyjádřil, byla to dobrá věc, a to dobrá pro vás. Jazyk byl navržen pro „průměrné“ inženýry, kteří pracovali ve společnosti Google, pokud se jim tak dá říkat. V jistém smyslu to, co jste si v té době o Go přečetli, působilo jako shazování. A dodnes není těžké najít lidi, kteří tuto kritiku nadále sdílejí.
Takže co změnilo můj názor?
Go je jednoduchý. V tomto ohledu se odlišuje od ostatních jazyků. Jednoduchost je ctnost a každá složitost, kterou do jazyka vneseme, je pečlivě zvážena.
Po dlouhou dobu – až příliš dlouhou, pokud se někoho zeptáte – postrádal Go jakoukoli skutečnou správu balíčků. Teprve v roce 2018 – po několika kolech zapojení komunity a neoficiálním experimentálním správci balíčků zvaném „dep“ – byla do jazyka přidána jakákoli oficiální podpora pro jejich řešení („moduly“).
V rámci této jednoduchosti však najdete mnoho hodnot. V jazyce Ruby můžete snadno napsat několik jednořádkových příkazů, které dělají skvělé věci, ale v těchto jednořádkových příkazech se skrývá spousta kouzel: pro nenáročného vývojáře je těžké vždy pochopit proces, který probíhá v zákulisí. Napsat stejnou věc v jazyce Go možná zabere pět řádků kódu, ale vy víte, co těch pět řádků dělá.
Go také odstraňuje jeden z klasických konceptů OOP: dědičnost. V Go nemůžete napsat základní třídu a nechat z ní dědit jinou třídu. Ve skutečnosti vůbec nemáte „třídy“.
Na první pohled to vypadá jako obrovské omezení, když vám někdo vezme jeden ze základních nástrojů pro opakované použití kódu a zapouzdření. A je přirozené, že vaším prvním sklonem je pocit nelibosti.
V dnešní době však dědičnost často nepoužíváte, i když byste mohli. Používáte rozhraní, zaměřujete se na chování a abstrakce – a to můžete snadno udělat v Go. Vlastně je to všechno, co v Go můžete dělat. Po nějaké době je absence dědičnosti příjemná, protože se vyhnete vrstvě technického dluhu tím, že se nemusíte vracet k nebezpečnému hnízdu vztahů, které jste vybudovali pomocí dědičnosti. Možná, že Pike přece jen na něco přišel.
Dnes si Go vydobylo definované místo v ekosféře jazyků. Nesnaží se nahradit C++, jak se kdysi myslelo (a navrhovalo). Zatímco před deseti lety jste si mohli myslet, že pro určitý projekt potřebujete Javu, dnes je možná lepší sáhnout po Go.
Jazyky, které se naučítePřední inženýři diskutují o Ruby on Rails, C#, Pythonu a JavaScriptu
.