Moje cesta od Pythonu k Go – sdílím rady a zdroje

Moje cesta od Pythonu k Go – sdílím rady a zdroje

Od překladatele: převedeny pro vás článek Ilada Lejeva o přechodu z Pythonu na Go. Č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 Python vývojář od základů.

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

Moje cesta od Pythonu k Go – sdílím rady a zdroje

Pozorování

První věc, kterou jsem udělal na začátku své cesty, bylo, že jsem studoval skvělý oficiální tutoriál “Tour Of Go”. Poskytuje pochopení syntaxe jazyka.

Abych zlepšil své znalosti, přečetl jsem také knihu “Go for Python Programmers”, 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 “How to Write Go Code” 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 Ivana Danilyuka.

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
}

Moje cesta od Pythonu k Go – sdílím rady a zdroje

Více příkladů zde a zde.

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 vysvětluje v tomto příspěvku nebo zde.

Lenošíte s konvertováním vašeho JSON do Go-struktury? Žádný problém, ten nástroj to udělá za vás.

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

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

net/http poskytuje pohodlnou a snadno použitelnou implementaci HTTP klienta a serveru.

Flask + Jinja2 => Gin

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

Vytváření CLI => Cobra

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

Další užitečné zdroje

[1] Francesc Campoy  —  určitě byste měli ocenit tyto YouTube kanál a GitHub profil.

[2] GopherCon — videa.

[3] Go Web Examples.

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

Moje cesta od Pythonu k Go – sdílím rady a zdroje

Skillbox doporučuje:

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster