
Od prevoditelja: preveli . Članak će biti koristan ne samo početnicima programerima, već i svima koji su na bilo koji način zainteresirani za Go.
Sviđa mi se Python. Ovaj je jezik bio moj favorit posljednjih pet godina. Prijateljski je, učinkovit i lako ga je naučiti. Koristi se gotovo za sve: od stvaranja jednostavnih skripti i web razvoja do vizualizacije podataka i strojnog učenja.
Postepeno "zrenje" Go-a, opsežna zajednica i činjenica da sve više tvrtki usvaja ovaj jezik nakon uspješnih testova natjerali su me da obratim pažnju na njega i produbim literaturu. Ali ovaj post nije o tome što je bolje — Python ili Go: usporedbi na mreži ima u izobilju. Po mom mišljenju, sve ovisi o području primjene. Planiram ispričati zašto sam odabrao Go, dajući nekoliko savjeta i poveznica na korisne resurse za sve koje zanima ova tema.
Skillbox preporučuje: Praktični tečaj .
Podsjećamo: za sve čitatelje "Habra" — popust od 10 000 rubalja prilikom upisa na bilo koji tečaj Skillbox uz promo kod "Habr".

Zapažanja
Prvo što sam učinio na početku puta je da sam proučio odličan službeni vodič “”. On pruža uvid u sintaksu jezika.
Kako bih poboljšao znanje, pročitao sam još i knjigu “”, koja mi je omogućila prelazak na sljedeću fazu — pokušaje i pogreške.
Uzeo sam uobičajene funkcije koje sam koristio u Pythonu (serializacija JSON-a ili rad s HTTP pozivima) i pokušao ih napisati na Go. Zahvaljujući toj vizualnoj usporedbi, uspio sam uočiti ključne razlike između jezika.
Strukturiranje projekta
Prije svega, Python ne zahtijeva specifičnu hijerarhiju direktorija, dok Go — da.
Go koristi "standardno" strukturiranje, koje je malo složenije i zahtijeva više rada. S druge strane, kao rezultat dobivamo dobro strukturiranu osnovu koda, gdje se koristi modularna struktura, a pri širenju projekta kod ostaje strogo organiziran.
Službeni vodič “” objašnjava kako organizirati svoj rad.
Statička stroga tipizacija
Go je statički tipiziran, i to će natjerati one koji su navikli na dinamički tipizirane jezike poput Pythona i Rubyja da se osjećaju nelagodno.
Nema sumnje da su dinamički jezici podložniji greškama, a programer mora uložiti više truda u provjeru ulaznih podataka. Primjer — funkcija koja izračunava sumu dva cijela broja. Ako se u funkciju proslijedi niz (što se ne dešava tako rijetko), to će rezultirati greškom TypeError.
U Go-u se to ne može dogoditi, jer je potrebno deklarirati tip za svaku varijablu i funkciju i odrediti koji tip varijable funkcija vraća.
Isprva je to iritirajuće: činilo mi se da ova osobina Go-a usporava rad, — ali kasnije sam shvatio da zapravo deklariranje svega štedi vrijeme, a vjerojatnost greške se smanjuje.
Prirodni paralelizam
Go ima nativnu podršku za paralelizam koristeći goroutine i kanale — što je vrlo praktično.
Koncept kanala isprva izgleda pomalo zbunjujuće. Međutim, s vremenom postaje jasniji i počinjete uživati u novim mogućnostima dok aktivno radite 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
}()
// pročitaj iz kanala
<-ch
} 
Više primjera i .
Rad s JSON-om
Pa, json.loads() više nema. U Pythonu je sve jednostavno: koristimo json.loads i nema problema.
Ali u Go-u, statički tipiziranom jeziku, ova operacija postaje složenija.
Ovdje, kada koristite JSON, sve je unaprijed definirano. Svako polje koje se ne uklapa u zadanu strukturu bit će ignorirano, i to je dobro. O tome se može razmišljati kao o unaprijed dogovorenom protokolu između dviju strana. Podaci koje ste primili u JSON-u trebali bi biti očekivani, a polja i tipovi JSON-a su 'dogovoreni' između obje 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 deserializirati JSON bez struktura, ali to treba izbjegavati kad god je to moguće i uzeti u obzir statičku prirodu jezika.
Dekodiranje JSON-a na GO-u najbolje je ili .
Lijenite se pretvoriti vaš JSON u Go strukturu? Nema problema, .
Čist kod
Go kompajler uvijek nastoji održati vaš kod „čistim“. Smatra da su neiskorištene varijable greška pri kompajliranju. Go koristi jedinstven pristup omogućavajući sustavu da rješava većinu problema s formatiranjem. Tako će Go pokrenuti program gofmt prilikom spremanja ili kompajliranja i samostalno ispraviti formatiranje.
Ne zanima vas varijable? U redu! Samo koristite _ (donju crtu) i dodijelite je praznom identifikatoru.
Masthead tutorial za ovaj dio rada sa jezikom je informacija iz “”.
Pronalaženje odgovarajuće biblioteke i okvira
Kao što sam koristio okvire i biblioteke poput Flask, Jinja2, Requests i čak Kazoo s Pythonom, bojao sam se da neću pronaći ništa odgovarajuće za Go.
No, zajednica je već riješila te probleme: jezik ima vlastite jedinstvene biblioteke koje omogućuju potpuno zaboravljanje na ono što ste koristili ranije.
Evo mojih favorita.
Python Requests => net/http
nudi jednostavnu i lako upotrebljivu implementaciju HTTP klijenta i poslužitelja.
Flask + Jinja2 => Gin
— HTTP web okvir s vrlo jednostavnim API-jem: parametrima u putanji, učitanim datotekama, grupnom usmjeravanju (/ api / v1, / api / v2), korisničkim formatima zapisivanja, posluživanjem statičkih datoteka, renderiranjem HTML-a i doista moćnim prilagođenim middleware-om.
Ocijenite benchmark.
Kreacija CLI-a => Cobra
— biblioteka za izradu moćnih CLI aplikacija, kao i program za generiranje aplikacija i naredbenih datoteka.
Cobra se koristi u mnogim velikim Go projektima, uključujući Kubernetes, etcd i OpenShift.
Evo još nekoliko biblioteka koje toplo preporučujem: , i ova nevjerojatna lista — .
Drugi korisni resursi
[1] — definitivno trebate provjeriti ove i .
[2] .
[3] .
[4] , , — Twitter računi.
Zaključujemo
Budući da sam pet godina bio stalni korisnik Pythona, bojao sam se da će prijelaz na Go biti bolan.
Ali nije: postoji mnogo resursa zajednice Go koje proširuju i nadopunjuju mogućnosti jezika, kao i razni korisni resursi koji će vam pomoći u prijelazu.
Go se brzo razvija, i nadam se da će Google učiniti to glavnim jezikom za pisanje aplikacija u oblaku i infrastrukturu.
Pridružite se!

Skillbox preporučuje:
- Dvoipogodišnji praktični tečaj .
- Online edukacijski tečaj .
- Praktični godišnji tečaj .
Izvor: habr.com
