
Od prekladateľa: preložili . Článok bude prospešný nielen pre začiatočníkov, ale aj pre všetkých, ktorí sa zaujímajú o Go.
Mám rád Python. Tento jazyk bol mojím favoritom posledných päť rokov. Je priateľský, efektívny a ľahko sa učí. Používa sa prakticky na všetko: od vytvárania jednoduchých skriptov a webového vývoja až po vizualizáciu dát a strojové učenie.
Postupné „zriehnutie“ Go, rozsiahla komunita a fakt, že čoraz viac spoločností prijíma tento jazyk po úspešných testoch, ma prinútili venovať mu pozornosť a prehlbiť sa v literatúre. Ale tento príspevok nie je o tom, čo je lepšie — Python alebo Go: na internete je množstvo porovnaní. Podľa mňa to závisí od oblasti použitia. Chcem sa podeliť o to, prečo som si vybral Go a poskytnúť niekoľko rád a odkazov na užitočné zdroje pre všetkých, ktorí sa zaujímajú o túto tému.
Skillbox odporúča: Praktický kurz .
Pripomíname: pre všetkých čitateľov „Habr“ — zľava 10 000 rubľov pri zapísaní na akýkoľvek kurz Skillbox s promo kódom „Habr“.

Pozorovania
Prvá vec, ktorú som urobil na začiatku svojej cesty, bolo študovať skvelý oficiálny tutoriál “”. Poskytuje porozumenie syntaktickým pravidlám jazyka.
Na zlepšenie svojich vedomostí som prečítal aj knihu “”, ktorá mi umožnila prejsť na ďalšiu fázu — pokusy a omyly.
Vzal som známe funkcie, ktoré som používal v Pythone (serializácia JSON alebo práca s HTTP volaniami), a pokúsil som sa ich napísať v Go. Vďaka takémuto názornému porovnaniu som dokázal odhaliť kľúčové rozdiely medzi jazykmi.
Komponovanie projektu
Predovšetkým Python nevyžaduje špecifickú hierarchiu adresárov, zatiaľ čo Go áno.
Go používa „štandardné“ komponovanie, ktoré je trochu zložitejšie a vyžaduje viac práce. Na druhej strane, výsledkom je dobre štruktúrovaný základ kódu, kde sa používa modulárna štruktúra, a pri rozšírení projektu kód zostáva striktne usporiadaný.
Oficiálny tutoriál “” vysvetľuje, ako organizovať svoju prácu.
Statická prísna typizácia
Go je staticky typizovaný, a to prinúti cítiť sa mimo svojej koži tých, ktorí sú zvyknutí na dynamicky typizované jazyky ako Python a Ruby.
Nedochádza k pochybnostiam, že dynamické jazyky sú viac náchylné na chyby, od vývojára si vyžadujú viac úsilia pri kontrole vstupných údajov. Príklad — funkcia, ktorá vypočíta súčet dvoch celých čísel. Ak sa do funkcie odovzdá reťazec (čo sa deje dosť často), dôjde k chybe TypeError.
V Go sa to nemôže stať, pretože je potrebné deklarovať typ pre každú premennú a funkciu a aj to, aký typ premennej funkcia vráti.
Najskôr to bolo frustrujúce: zdalo sa mi, že táto vlastnosť Go spomaľuje prácu, — ale potom som si uvedomil, že deklarovanie všetkého v skutočnosti šetrí čas a znižuje pravdepodobnosť chyby.
Nativný paralelismus
Go má nativnú podporu paralelizmu pomocou gorutín a kanálov — to je praktické.
Koncept kanálov sa najprv zdá byť trochu zložitý. Avšak časom sa stáva zrozumiteľnejším a začnete si užívať nové možnosti, keď s nimi aktívne pracujete.
Tu je vizualizácia všetkého, čo bolo povedané od .
package main
func main() {
// create new channel of type int
ch := make(chan int)
// start new anonymous goroutine
go func() {
// send 42 to channel
ch <- 42
}()
// read from channel
<-ch
} 
Viac príkladov a .
Práca s JSON.
No, json.loads() už neexistuje. V Pythone je to jednoduché: používame json.loads a žiadne problémy.
Ale v Go, staticky typovanom jazyku, táto operácia sa stáva zložitější.
Tu pri používaní JSON je všetko vopred definované. Akékoľvek pole, ktoré nezapadá do zadefinovanej štruktúry, bude ignorované, a to je dobré. Na toto sa dá myslieť ako na vopred dohodnutý protokol medzi dvoma stranami. Dáta, ktoré ste dostali v JSON, by mali byť očakávané, a polia a typy JSON sú dohodnuté oboma 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"`
}Samozrejme, môžete deserializovať JSON bez štruktúr, ale tomu by ste sa mali vyhnúť, ak je to možné, a zohľadniť statickú povahu jazyka.
Dekódovanie JSON v GO sa najlepšie alebo .
Ste leniví konvertovať svoj JSON do Go štruktúry? Žiadny problém, .
Čistý kód
Kompilátor Go sa vždy snaží udržiavať váš kód „v čistote“. Považuje nepoužívané premenné za chybu kompilácie. V Go sa používa jedinečný prístup, ktorý umožňuje systému riešiť väčšinu problémov s formátovaním. Takto Go spustí program gofmt pri uložení alebo kompilácii a sám opraví formátovanie.
Nevyrušujú vás premenné? Okej! Stačí použiť _ (podčiarknutie) a priradiť ho prázdnemu identifikátoru.
Majstrovaním tejto časti práce s jazykom je informácia z “”.
Hľadanie vhodných knižníc a rámcov
Používal som s Python rámce a knižnice ako Flask, Jinja2, Requests a dokonca Kazoo, takže som sa bál, že nič vhodné pre Go nenájdem.
Ale komunita už tieto problémy vyriešila: jazyk má vlastné jedinečné knižnice, ktoré umožňujú úplne zabudnúť na to, čo ste používali predtým.
Tu sú moje obľúbené.
Python Requests => net/http
poskytuje pohodlnú a ľahko použiteľnú implementáciu HTTP klienta a servera.
Flask + Jinja2 => Gin
je webový rámec HTTP s veľmi jednoduchým API: parametrami v ceste, nahrávanými súbormi, routovaním skupín (/ api / v1, / api / v2), vlastnými formátmi logov, obsluhou statických súborov, renderovaním HTML a skutočne silným prispôsobiteľným middleware.
Oceňte benchmark.
Vytvorenie CLI => Cobra
je knižnica na vytváranie mocných CLI aplikácií, ako aj program na generovanie aplikácií a príkazových súborov.
Cobra sa používa v mnohých veľkých Go projektoch, vrátane Kubernetes, etcd a OpenShift.
Tu je niekoľko ďalších knižníc, ktoré dôrazne odporúčam: , a tento úžasný zoznam — .
Iné užitočné zdroje
[1] — určite by ste mali oceniť tieto a .
[2] .
[3] .
[4] , , — Twitter účty.
Zhrnieme to
Ako stály používateľ Pythona počas piatich rokov, obával som sa, že prechod na Go bude bolestivý.
Ale nie: existujú práce komunity Go, ktorá rozširuje a dopĺňa možnosti jazyka, ako aj rôzne užitočné zdroje, ktoré vám pomôžu s prechodom.
Go sa rýchlo rozvíja a dúfam, že Google dokáže urobiť z neho hlavný jazyk pre písanie cloudových aplikácií a infraštruktúry.
Pridajte sa!

Skillbox odporúča:
- Dvojročný praktický kurz .
- Vzdelávací online kurz .
- Praktický ročný kurz .
Zdroj: habr.com
