Moja cesta od Pythonu po Go – zdieľanie tipov a zdrojov

Moja cesta od Pythonu po Go – zdieľanie tipov a zdrojov

Od prekladateľa: prenesené Pre vás je článok Ilada Leeva o prechode z Pythonu na Go. Článok bude užitočný nielen pre začínajúcich programátorov, ale aj pre všetkých, ktorých Go nejako zaujíma.

Mám rád Python. Tento jazyk bol môj obľúbený posledných päť rokov. Je priateľský, efektívny a ľahko sa učí. Používa sa takmer na všetko: od jednoduchého skriptovania a vývoja webu až po vizualizáciu údajov a strojové učenie

Postupné „dozrievanie“ Go, rozsiahla komunita a fakt, že si tento jazyk po úspešných testoch osvojuje čoraz viac firiem, ma prinútili venovať mu pozornosť a zahĺbiť sa do literatúry. Tento príspevok však nie je o tom, čo je lepšie - Python alebo Go: Na internete je obrovské množstvo porovnaní. Podľa mňa to všetko závisí od aplikácie. Budem hovoriť o tom, prečo som si vybral Go, a poskytnem niekoľko tipov a odkazov na užitočné zdroje pre každého, koho táto téma zaujíma.

Skillbox odporúča: Praktický kurz Vývojár Pythonu od nuly.

Pripomíname vám: pre všetkých čitateľov „Habr“ - zľava 10 000 rubľov pri registrácii do akéhokoľvek kurzu Skillbox pomocou propagačného kódu „Habr“.

Moja cesta od Pythonu po Go – zdieľanie tipov a zdrojov

Postrehy

Prvá vec, ktorú som urobil na začiatku svojej cesty, bolo preštudovanie vynikajúceho oficiálneho tutoriálu “Tour Of Go" Poskytuje pochopenie syntaxe jazyka.

Aby som si zdokonalil svoje vedomosti, prečítal som si aj knihu “Choďte na Python programátorov“, čo nám umožnilo prejsť do ďalšej fázy - pokus a omyl.

Vzal som si známe funkcie, ktoré som používal v Pythone (serializácia JSON alebo spracovanie HTTP hovorov) a skúsil som ich napísať v Go. Vďaka tomuto prehľadnému porovnaniu som dokázal identifikovať kľúčové rozdiely medzi jazykmi.

Usporiadanie projektu

Po prvé, Python nevyžaduje špecifickú hierarchiu adresárov, zatiaľ čo Go áno.

Go používa „štandardné“ rozloženie, ktoré je o niečo zložitejšie a vyžaduje viac práce. Na druhej strane je výsledkom dobre štruktúrovaná kódová základňa, ktorá využíva modulárnu štruktúru a kód zostáva prísne organizovaný, keď sa projekt rozširuje.

Oficiálny návod “Ako napísať Go kód“ vysvetľuje, ako si zorganizovať prácu.

Statické silné písanie

Go je staticky napísaný, čo spôsobí, že tí, ktorí sú zvyknutí na dynamicky zadávané jazyky ako Python a Ruby, sa budú cítiť nepríjemne.

Niet pochýb o tom, že dynamické jazyky sú náchylnejšie na chyby a vyžadujú viac úsilia zo strany vývojára na overenie vstupných údajov. Príkladom je funkcia, ktorá vypočítava súčet dvoch celých čísel. Ak funkcii odovzdáte reťazec (čo nie je také zriedkavé), výsledkom bude chyba TypeError.

Toto sa v Go nemôže stať, pretože musíte deklarovať typ pre každú premennú a funkciu a aký typ premennej funkcia vráti.

Spočiatku to bolo nepríjemné – myslel som si, že táto funkcia Go veci spomaľuje – ale potom som si uvedomil, že deklarovanie všetkého v skutočnosti šetrí čas a znižuje pravdepodobnosť chýb.

Natívna súbežnosť

Go má natívnu podporu súbežnosti pomocou podprogramov a kanálov, čo je pohodlné.

Koncept kanálov sa na prvý pohľad zdá trochu mätúci. Časom sa to však vyjasní a vy si nové možnosti začnete užívať a aktívne s nimi pracovať.

Tu je vizualizácia všetkého povedaného z Ivan Danyuk.

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 po Go – zdieľanie tipov a zdrojov

Viac príkladov tu и tu.

Práca s JSON

No, json.loads() už nie je. V Pythone je všetko jednoduché: používame json.loads a nie sú žiadne problémy.

Ale v Go, staticky typovanom jazyku, sa táto operácia stáva zložitejšou.

Tu je pri použití JSON všetko preddefinované. Každé pole, ktoré nezapadá do danej štruktúry, bude ignorované, čo je dobré. Môžete si to predstaviť ako vopred dohodnutý protokol medzi dvoma stranami. Údaje, ktoré dostanete v JSON, by mali byť také, aké očakávate, a na poliach a typoch JSON by sa mali „dohodnúť“ obe strany.

{
  “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 ak je to možné, mali by ste sa tomu vyhnúť a mala by sa brať do úvahy statická povaha jazyka.

Dekódovanie JSON na GO je najlepšie vysvetlené v tomto príspevku alebo tu.

Ste leniví na to, aby ste previedli svoj JSON na štruktúru Go? Žiaden problém, tento nástroj urobí všetko za vás.

Čistý kód

Kompilátor Go sa vždy pokúsi udržať váš kód čistý. Nepoužité premenné považuje za chybu pri kompilácii. Go využíva jedinečný prístup, ktorý umožňuje systému vyriešiť väčšinu problémov s formátovaním. Go teda pri ukladaní alebo kompilácii spustí program gofmt a upraví samotné formátovanie.

Nestaráte sa o premenné? OK! Stačí použiť _ (podčiarkovník) a priradiť ho k prázdnemu id.

Mastridská príručka pre túto časť práce s jazykom je informácia z „Efektívne Go".

Nájdenie správnej knižnice a rámcov

Použil som frameworky a knižnice ako Flask, Jinja2, Requests a dokonca aj Kazoo s Pythonom, takže som sa bál, že nenájdem nič vhodné pre Go.

Komunita však už tieto problémy vyriešila: jazyk má svoje vlastné jedinečné knižnice, ktoré vám umožňujú úplne zabudnúť na to, čo ste predtým používali.

Tu sú moje obľúbené.

Požiadavky Pythonu => net/http

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

Fľaša + Jinja2 => Gin

Borovička - Webový rámec HTTP s veľmi jednoduchým API: parametre cesty, súbory na stiahnutie, skupinové smerovanie (/api/v1, /api/v2), vlastné formáty protokolov obsluhujúce statické súbory, vykresľovanie HTML a skutočne výkonný vlastný middleware.
ohodnotiť toto benchmark.

Tvorba CLI => Cobra

kobra — knižnica na vytváranie výkonných aplikácií CLI, ako aj program na generovanie aplikácií a dávkových súborov.
Cobra sa používa v mnohých veľkých projektoch Go, vrátane Kubernetes, etcd a OpenShift.

Tu je niekoľko ďalších knižníc, ktoré vrelo odporúčam: Viper, Gonfig a tento úžasný zoznam - Awesome-Go.

Ďalšie užitočné zdroje

[1] Francesc Campoy  - tieto určite musíte zhodnotiť Kanál YouTube и Profil GitHub.

[2] GopherCon - video, [3] Prejsť na webové príklady, [4] Golang Weekly, Gopher Academy, Golang News — Twitter účty.

Sčítanie

Keďže som päť rokov pravidelným používateľom Pythonu, bál som sa, že prechod na Go bude bolestivý.

Ale nie: existuje práca z komunity Go, ktorá rozširuje a dopĺňa možnosti jazyka, ako aj rôzne užitočné zdroje, ktoré vám s prechodom pomôžu.

Go rýchlo rastie a dúfam, že Google z neho urobí primárny jazyk na písanie cloudových aplikácií a infraštruktúry.

Pripojte sa teraz!

Moja cesta od Pythonu po Go – zdieľanie tipov a zdrojov

Skillbox odporúča:

Zdroj: hab.com