
Od překladatele: převedeny . Článek bude užitečný nejen začínajícím programátorům, ale i všem, kdo se nějakým způsobem zajímají o Go.
Mám rád Python. Tento jazyk byl mým favoritem posledních pět let. Je přívětivý, efektivní a snadno se učí. Používá se prakticky na všechno: od vytváření jednoduchých skriptů a webového vývoje po vizualizaci dat a strojové učení.
Postupné "zrání" Go, rozsáhlá komunita a skutečnost, že stále více společností přijímá tento jazyk po úspěšných testech, mě přiměly věnovat mu pozornost a ponořit se do literatury. Ale tento příspěvek není o tom, co je lepší — Python nebo Go: na internetu je obrovské množství srovnání. Podle mého názoru to závisí na oboru použití. Chci vám říct, proč jsem si vybral Go, a poskytnout několik rad a odkazy na užitečné zdroje pro všechny, kdo se o toto téma zajímají.
Skillbox doporučuje: Praktický kurz .
Připomínáme: pro všechny čtenáře "Habra" – sleva 10 000 korun při registraci na jakýkoli kurz Skillbox s promokódem "Habr".

Pozorování
První věc, kterou jsem udělal na začátku své cesty, bylo, že jsem studoval skvělý oficiální tutoriál “”. Poskytuje pochopení syntaxe jazyka.
Abych zlepšil své znalosti, přečetl jsem také knihu “”, která mi umožnila přejít na další etapu — pokusy a omyly.
Vzalo jsem si obvyklé funkce, které jsem používal v Pythonu (serializace JSON nebo práce s HTTP voláními), a zkusil jsem je napsat v Go. Díky takovému názornému srovnání jsem dokázal odhalit klíčové rozdíly mezi jazyky.
Struktura projektu
Především Python nevyžaduje specifickou hierarchii katalogů, zatímco Go ano.
Go používá "standardní" strukturu, která je o něco složitější a vyžaduje více práce. Na druhou stranu však získáme dobře strukturovaný základ kódu, kde se používá modulární struktura, a při rozšíření projektu kód zůstává pečlivě uspořádán.
Oficiální tutoriál “” vysvětluje, jak organizovat svou práci.
Statická přísná typizace
Go je staticky typizovaný, a to přiměje cítit se trochu nekomfortně ty, kteří jsou zvyklí na dynamicky typizované jazyky jako Python a Ruby.
Není pochyb o tom, že dynamické jazyky jsou náchylnější k chybám, vyžadují od vývojáře větší úsilí při kontrole vstupních dat. Příkladem je funkce, která počítá součet dvou celých čísel. Pokud se předá řetězec do funkce (což se stává celkem často), dojde k chybě TypeError.
V Go se to nemůže stát, protože zde je nutné pro každou proměnnou a funkci vyhlásit typ a také to, jaký typ proměnné funkce vrátí.
Zpočátku to bylo frustrující: myslel jsem si, že tato vlastnost Go zpomaluje práci, – ale pak přišlo pochopení, že vyhlašování všeho ve skutečnosti šetří čas a snižuje pravděpodobnost chyb.
Nativní paralelismus
Go má nativní podporu paralelismu pomocí gorutin a kanálů — to je výhodné.
Koncept kanálů se zpočátku zdá poněkud zmatený. Časem se však stává srozumitelnější a začnete si užívat nové možnosti, když s nimi aktivně pracujete.
Zde je vizualizace všeho, co bylo řečeno od .
package main
func main() {
// vytvořit nový kanál typu int
ch := make(chan int)
// spustit novou anonymní gorutinu
go func() {
// poslat 42 do kanálu
ch <- 42
}()
// číst z kanálu
<-ch
} 
Více příkladů a .
Práce s JSON
No, json.loads() už není. V Pythonu je to jednoduché: používáme json.loads a žádné problémy.
Ale v Go, staticky typovaném jazyce, se tato operace stává složitější.
Zde, při používání JSON, je vše předem definováno. Jakékoli pole, které se nevejde do stanovené struktury, bude ignorováno, což je v pořádku. Můžete o tom přemýšlet jako o předem odsouhlaseném protokolu mezi dvěma stranami. Data, která dostanete v JSON, by měla být očekávaná a pole a typy JSON jsou "dohodnuté" oběma stranami.
{
"first": "Elad",
"last": "Leev",
"location":"IL",
"id": "93"
}type AccountData struct {
First string `json:"first"`
Last string `json:"last"`
Location string `json:"location"`
ID string `json:"id"`
}Samozřejmě můžete deserializovat JSON bez struktur, ale pokud je to možné, měli byste se tomu vyhnout a brát v úvahu statickou povahu jazyka.
Dekódování JSON v GO se nejlépe nebo .
Lenošíte s konvertováním vašeho JSON do Go-struktury? Žádný problém, .
Čistý kód
Go kompilátor se vždy snaží udržet váš kód „čistý“. Považuje nepoužívané proměnné za chybu při kompilaci. Go používá unikátní přístup, který umožňuje systému vyřešit většinu problémů s formátováním. Při ukládání nebo kompilaci tak Go spustí program gofmt a samo opraví formátování.
Nestaráte se o proměnné? V pořádku! Stačí použít _ (podtržítko) a přiřadit mu prázdný identifikátor.
Mistr-tutorial pro tuto část práce s jazykem je informace z “”.
Hledání vhodné knihovny a frameworků
Používal jsem s Pythonem frameworky a knihovny jako Flask, Jinja2, Requests a dokonce Kazoo, takže jsem se obával, že pro Go nenajdu nic vhodného.
Ale komunita už tyto problémy vyřešila: jazyk má vlastní unikátní knihovny, které vám umožní zcela zapomenout na to, co jste používali dříve.
Tady jsou mé oblíbené.
Python Requests => net/http
poskytuje pohodlnou a snadno použitelnou implementaci HTTP klienta a serveru.
Flask + Jinja2 => Gin
— webový framework HTTP s velmi jednoduchým API: parametry v cestě, nahrávané soubory, routování skupin (/api/v1, /api/v2), vlastní formáty logování, obsluhující statické soubory, rendrování HTML a opravdu silný vlastní middleware.
Oceněte benchmark.
Vytváření CLI => Cobra
— knihovna pro vytváření mocných CLI aplikací, stejně jako program pro generování aplikací a příkazových souborů.
Cobra se používá v mnoha velkých Go projektech, včetně Kubernetes, etcd a OpenShift.
Tady je několik dalších knihoven, které důrazně doporučuji: , a tento úžasný seznam — .
Další užitečné zdroje
[1] — určitě byste měli ocenit tyto a .
[2] .
[3] .
[4] , , — Twitter účty.
Shrnutí
Jako dlouholetý uživatel Pythonu po dobu pěti let jsem se obával, že přechod na Go bude bolestivý.
Ale ne: existují příspěvky komunity Go, které rozšiřují a doplňují možnosti jazyka, stejně jako různé užitečné zdroje, které vám pomohou s přechodem.
Go se rychle vyvíjí a doufám, že Google učiní jeho hlavním jazykem pro psaní cloudových aplikací a infrastruktury.
Připojte se!

Skillbox doporučuje:
- Dvouroční praktický kurz .
- Vzdělávací online kurz .
- Praktický roční kurz .
Zdroj: habr.com
