Moja cesta od Pythonu k Go — delím sa o rady a zdroje

Moja cesta od Pythonu k Go — delím sa o rady a zdroje

Od prekladateľa: preložili pre vás článok Ilada Leeva o prechode z Pythonu na Go. Č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 Python vývojár od nuly.

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“.

Moja cesta od Pythonu k Go — delím sa o rady a zdroje

Pozorovania

Prvá vec, ktorú som urobil na začiatku svojej cesty, bolo študovať skvelý oficiálny tutoriál “Tour Of Go”. Poskytuje porozumenie syntaktickým pravidlám jazyka.

Na zlepšenie svojich vedomostí som prečítal aj knihu “Go for Python Programmers”, 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 “How to Write Go Code” 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 Ivana Daniluka.

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
}

Moja cesta od Pythonu k Go — delím sa o rady a zdroje

Viac príkladov tu a tu.

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 vysvetľuje v tomto príspevku alebo tu.

Ste leniví konvertovať svoj JSON do Go štruktúry? Žiadny problém, tento nástroj to spraví za vás.

Č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 “Effective Go”.

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

net/http poskytuje pohodlnú a ľahko použiteľnú implementáciu HTTP klienta a servera.

Flask + Jinja2 => Gin

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 web benchmark.

Vytvorenie CLI => Cobra

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: Viper, Gonfig a tento úžasný zoznam — Awesome-Go.

Iné užitočné zdroje

[1] Francesc Campoy  —  určite by ste mali oceniť tieto YouTube kanál a GitHub profil.

[2] GopherCon — videá.

[3] Go Web Examples.

[4] Golang Weekly, Gopher Academy, Golang News — 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!

Moja cesta od Pythonu k Go — delím sa o rady a zdroje

Skillbox odporúča:

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster