
Od prevodnika: prebačene . Članek bo koristen ne le začetnikom programerjem, ampak tudi vsem, ki jih na kakršen koli način zanima Go.
Rad imam Python. Ta jezik je bil moj favorit zadnjih pet let. Je prijazen, učinkovit in ga je lahko usvojiti. Uporablja se skoraj za vse: od pisanja preprostih skriptov in spletnega razvoja do vizualizacije podatkov in strojnega učenja
Postopno „zoreletje“ Go, obširna skupnost in dejstvo, da ga vse več podjetij sprejema po uspešnih testih, so me pritegnili k temu jeziku in k raziskovanju literature. Toda ta objava ni o tem, kateri je boljši — Python ali Go: v omrežju je ogromno primerjav. Po mojem mnenju je vse odvisno od področja uporabe. Povedal vam bom, zakaj sem izbral Go ter dal nekaj nasvetov in povezav do koristnih virov za vse, ki jih zanima ta tema.
Skillbox priporoča: Praktični tečaj .
Opominjamo: za vse bralce »Habra« — popust 10 000 rubljev ob vpisu na kateri koli tečaj Skillbox s promo kodo »Habr«.

Opazovanja
Prvo, kar sem naredil na začetku poti, je bilo, da sem preučil odličen uradni tutorial “”. Ta ponuja razumevanje sintakse jezika.
Da bi izboljšal svoje znanje, sem prebral še knjigo “”, ki mi je pomagala preiti na naslednjo stopnjo — poskuse in napake.
Vzel sem običajne funkcije, ki sem jih uporabljal v Pythonu (serializacija JSON ali delo z HTTP klici), in poskušal napisati te funkcije v Go. S takim nazornim primerjanjem sem uspel ugotoviti ključne razlike med jeziki.
Struktura projekta
Prvič, Python ne zahteva specifične hierarhije imenikov, medtem ko Go to zahteva.
Go uporablja “standardno” strukturo, ki je nekoliko bolj zapletena in zahteva več dela. Po drugi strani pa dobimo dobro strukturirano osnovo kode, kjer se uporablja modularna struktura, pri širjenju projekta pa koda ostaja strogo urejena.
Uradni tutorial “” pojasnjuje, kako organizirati svoje delo.
Statična stroga tipizacija
Go je statično tipiziran, in to bo tiste, ki so navajeni na dinamično tipizirane jezike, kot sta Python in Ruby, spravilo v nezavidljiv položaj.
Ništa nije sumnjivo da su dinamički jezici više podložni greškama, te je potrebno više truda od programera prilikom verifikacije unosa. Na primer, funkcija koja računa zbir dva cela broja. Ako se string prosledi funkciji (što se ne dešava retko), to će dovesti do greške TypeError.
U Go-u to nije moguće, jer ovde mora da se deklariše tip za svaku promenljivu i funkciju, kao i tip promenljive koju funkcija vraća.
Isprva je bilo iritantno: činilo mi se da ova karakteristika Go-a usporava rad, ali onda je došlo razumevanje da dekleracija zapravo štedi vreme, a verovatnoća greške se smanjuje.
Prvobitan paralelizam
Go ima nativnu podršku za paralelizam koristeći goroutines i kanale - to je veoma praktično.
Koncept kanala isprva deluje pomalo zbunjujuće. Međutim, tokom vremena postaje jasniji i počinjete uživati u novim mogućnostima, aktivno radeći s njima.
Evo vizualizacije svega rečenog od .
package main
func main() {
// kreiraj novi kanal tipa int
ch := make(chan int)
// pokreni novu anonimnu goroutine
go func() {
// pošalji 42 u kanal
ch <- 42
}()
// čitaj iz kanala
<-ch
} 
Več primerov in .
Rad sa JSON-om
Pa, json.loads() više nema. U Python-u je to jednostavno: koristimo json.loads i nema problema.
Ali u Go-u, statički tipiziranom jeziku, ova operacija postaje složenija.
Ovde, kada se koristi JSON, sve je unapred definisano. Svako polje koje se ne uklapa u zadatu strukturu biće ignorisano, i to je dobro. Ovo se može smatrati unapred dogovorenim protokolom između strana. Podaci koje ste dobili u JSON-u treba da budu očekivani, a polja i tipovi JSON-a su 'dogovoreni' od strane obe strane.
{
"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"`
}Naravno, možete deserializovati JSON bez struktura, ali po mogućstvu to treba izbegavati uzimajući u obzir statičku prirodu jezika.
Dekodiranje JSON-a u GO-u najbolje je ili .
Ulenjili se da konvertujete vaš JSON u Go strukturu? Nema problema, .
Čist kod
Go компилátor se vždy snaží udržet váš kód „čistý“. Považuje nepoužívané proměnné za chybu kompilace. Go používá jedinečný přístup, který systému umožňuje řešit většinu problémů s formátováním. Při ukládání nebo kompilaci Go spustí program gofmt a sám opraví formátování.
Na proměnné vám nezáleží? V pořádku! Stačí použít _ (podtržítko) a přiřadit ho prázdnému identifikátoru.
Masthead tutoriálem pro tuto část práce s jazykem jsou informace z “”.
Hledání vhodné knihovny a frameworků
Používal jsem s Pythonem frameworky a knihovny jako Flask, Jinja2, Requests a dokonce i Kazoo, takže jsem se bál, že nenajdu nic vhodného pro Go.
Ale komunita tyto problémy už vyřešila: jazyk má své vlastní jedinečné knihovny, které vám umožňují zcela zapomenout na to, co jste používali dříve.
Tady jsou moje oblíbené.
Python Requests => net/http
poskytuje pohodlnou a snadno použitelnou implementaci HTTP klienta a serveru.
Flask + Jinja2 => Gin
je webový HTTP framework s velmi jednoduchým API: parametry v cestě, nahrávané soubory, routování skupin (/ api / v1, / api / v2), vlastní formáty logů, obsluhující statické soubory, renderování HTML a skutečně mocné vlastní middleware.
Ohodnoťte benchmark.
Vytváření CLI => Cobra
je knihovna pro vytváření mocných CLI aplikací, stejně jako program na 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 ještě několik knihoven, které vám vřele doporučuji: , a tento úžasný seznam — .
Drugi korisni resursi
[1] určitě byste měli ohodnotit tyto in .
[2] .
[3] .
[4] , , — Twitter účty.
Zaključno
Jako stálý uživatel Pythonu po dobu pěti let jsem se bál, že přechod na Go bude bolestivý.
Ale ne: komunitní práce Go rozšiřuje a doplňuje možnosti jazyka, a také různé užitečné zdroje, které vám pomohou s přechodem.
Go se rychle vyvíjí a doufám, že Google dokáže udělat z něj hlavní jazyk pro psaní cloudových aplikací a infrastruktury.
Pridružite se!

Skillbox priporoča:
- Двухлетний практический курс .
- Образовательный онлайн-курс .
- Практический годовой курс .
Izvor: habr.com
