
FrÄn översÀttaren: översatte . Artikeln kommer att vara anvÀndbar inte bara för nybörjande programmerare, utan ocksÄ för alla som pÄ nÄgot sÀtt Àr intresserade av Go.
Jag gillar Python. Det hÀr sprÄket har varit min favorit de senaste fem Ären. Det Àr anvÀndarvÀnligt, effektivt och lÀtt att lÀra sig. Det anvÀnds praktiskt taget till allt: frÄn att skapa simpla skript och webbutveckling till datavisualisering och maskininlÀrning.
Det gradvisa "mognandet" av Go, det omfattande communityt och det faktum att allt fler företag anammar detta sprĂ„k efter framgĂ„ngsrika tester, fick mig att lĂ€gga mĂ€rke till det och dyka djupare in i litteraturen. Men det hĂ€r inlĂ€gget handlar inte om vilket som Ă€r bĂ€ttre â Python eller Go: det finns enorma mĂ€ngder jĂ€mförelser pĂ„ nĂ€tet. Enligt min Ă„sikt beror det helt pĂ„ anvĂ€ndningsomrĂ„det. Jag kommer att berĂ€tta varför jag valt Go och ge nĂ„gra rĂ„d och lĂ€nkar till anvĂ€ndbara resurser för alla som Ă€r intresserade av Ă€mnet.
Skillbox rekommenderar: Praktisk kurs .
PĂ„minnelse: för alla lĂ€sare av "Habr" â 10 000 rubel rabatt vid registrering för vilken kurs som helst pĂ„ Skillbox med rabattkoden "Habr".

Observationer
Det första jag gjorde i början av min resa var att studera den utmĂ€rkta officiella guiden ââ. Den ger en förstĂ„else för sprĂ„kets syntax.
För att förbĂ€ttra mina kunskaper lĂ€ste jag ocksĂ„ boken ââ, som möjliggjorde att jag kunde gĂ„ vidare till nĂ€sta steg â prövningar och misstag.
Jag tog de funktioner jag var van vid i Python (JSON-serialisering eller arbete med HTTP-anrop) och försökte skriva dem i Go. Tack vare sÄdan visuell jÀmförelse lyckades jag identifiera de viktigaste skillnaderna mellan sprÄken.
Projektkomposition
Först och frÀmst krÀver inte Python en specifik kataloghierarki, medan Go gör det.
Go anvÀnder en "standard"-komposition som Àr lite mer komplex och krÀver mer arbete. à andra sidan fÄr vi en vÀlstrukturerad kodbas dÀr modulÀr struktur anvÀnds, och nÀr projektet vÀxer förblir koden strikt organiserad.
Den officiella guiden ââ förklarar hur man organiserar sitt arbete.
Statisk strikt typisering
Go Àr statiskt typat, och detta kommer att fÄ dem som Àr vana vid dynamiskt typade sprÄk som Python och Ruby att kÀnna sig obekvÀma.
Det rÄder ingen tvekan om att dynamiska sprÄk Àr mer benÀgna att ha fel, och det krÀvs mer anstrÀngning frÄn utvecklarens sida för att kontrollera indata. Ett exempel Àr en funktion som berÀknar summan av tvÄ heltal. Om en strÀng skickas till funktionen (vilket inte Àr sÄ ovanligt), leder det till ett TypeError.
I Go kan detta inte hÀnda, eftersom man mÄste deklarera typ för varje variabel och funktion, samt vilken typ av variabel funktionen kommer att returnera.
Först Àr det irriterande: jag kÀnde att denna funktion i Go saktade ner arbetet, men sedan kom förstÄelsen att det faktiskt sparar tid att deklarera allt, och risken för fel minskar.
Inbyggd parallellism
Go har inbyggt stöd för parallellism med hjĂ€lp av gorutiner och kanaler â det Ă€r praktiskt.
Konceptet av kanaler verkar först lite förvirrat. Men med tiden blir det tydligare och du börjar njuta av de nya möjligheterna nÀr du arbetar aktivt med dem.
HÀr Àr en visualisering av allt som sagts av .
package main
func main() {
// skapa ny kanal av typ int
ch := make(chan int)
// starta en ny anonym gorutin
go func() {
// skicka 42 till kanalen
ch <- 42
}()
// lÀs frÄn kanalen
<-ch
} 
Fler exempel och .
Arbeta med JSON
NÄvÀl, json.loads() finns inte lÀngre. I Python Àr allt enkelt: vi anvÀnder json.loads, och inga problem.
Men i Go, ett statiskt typat sprÄk, blir denna operation mer komplicerad.
HÀr Àr allting förutbestÀmt nÀr man anvÀnder JSON. Varje fÀlt som inte passar in i den angivna strukturen kommer att ignoreras, och det Àr bra. Man kan tÀnka pÄ det som ett förhandsöverenskommet protokoll mellan tvÄ parter. De data du fÄr i JSON ska vara förvÀntade, och fÀlten och JSON-typerna Àr "överenskomna" av bÄda parter.
{
"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"`
}SjÀlvklart kan du deserialisera JSON utan strukturer, men det bör undvikas om möjligt med tanke pÄ sprÄkets statiska natur.
JSON-avkodning i Go förklaras bÀst eller .
Ăr du lat att konvertera din JSON till Go-struktur? Inga problem, .
Ren kod
Go-kompilatorn kommer alltid att strÀva efter att hÄlla din kod "ren". Den betraktar oanvÀnda variabler som ett kompilationsfel. Go anvÀnder en unik metod som lÄter systemet lösa de flesta formateringsproblemen. SÄledes kommer Go att köra programmet gofmt vid sparande eller kompilering och automatiskt rÀtta till formateringen.
Bryr du dig inte om variabler? Okej! AnvÀnd bara _ ( understreck) och tilldela den till en tom identifierare.
En masterclass-tutorial för denna del av sprĂ„ket Ă€r information frĂ„n ââ.
Att hitta rÀtt bibliotek och ramverk
Jag har anvÀnt ramverk och bibliotek som Flask, Jinja2, Requests och till och med Kazoo i Python, sÄ jag var orolig för att jag inte skulle hitta nÄgot passande för Go.
Men gemenskapen har redan löst dessa problem: sprÄket har sina egna unika bibliotek som lÄter dig helt glömma vad du anvÀnde tidigare.
HÀr Àr mina favoriter.
Python Requests => net/http
ger en bekvÀm och lÀttanvÀnd implementation av HTTP-klient och server.
Flask + Jinja2 => Gin
Àr ett HTTP-webbramverk med ett mycket enkelt API: parametrar i vÀgen, filuppladdningar, routing för grupper (/ api / v1, / api / v2), anpassade loggformat, serva statiska filer, rendering av HTML och riktigt kraftfulla anpassade middleware.
UtvÀrdera benchmark.
CLI-skapande => Cobra
Àr ett bibliotek för att skapa kraftfulla CLI-applikationer, samt ett program för att generera applikationer och kommandofiler.
Cobra anvÀnds i mÄnga stora Go-projekt, inklusive Kubernetes, etcd och OpenShift.
HĂ€r Ă€r nĂ„gra fler bibliotek som jag starkt rekommenderar: , och den hĂ€r fantastiska listan â .
Andra anvÀndbara resurser
[1] ââ âdu mĂ„ste definitivt kolla in dessa och .
[2] .
[3] .
[4] , , â Twitter-konton.
Sammanfattning
Som en lÄngvarig anvÀndare av Python i fem Är var jag rÀdd för att övergÄngen till Go skulle bli smÀrtsam.
Men nej: det finns bidrag frÄn Go-gemenskapen som utvidgar och kompletterar sprÄkets funktioner, samt olika anvÀndbara resurser som kommer att hjÀlpa dig att övergÄ.
Go utvecklas snabbt, och jag hoppas att Google kan göra det till det frÀmsta sprÄket för att skriva molnapplikationer och infrastruktur.
Följ med!

Skillbox rekommenderar:
- TvÄÄrig praktisk kurs .
- Utbildningskurs online .
- Praktisk Ärskurs .
KĂ€lla: habr.com
