
FrÄn översÀttaren: översatt . Artikeln kommer att vara anvÀndbar inte bara för nybörjare, 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. Han Àr vÀnlig, effektiv och lÀtt att lÀra sig. AnvÀnds till nÀstan allt: frÄn enkel skriptning och webbutveckling till datavisualisering och maskininlÀrning
Den gradvisa "mognaden" av Go, den omfattande communityn och det faktum att fler och fler företag tar till sig detta sprĂ„k efter framgĂ„ngsrika tester tvingade mig att uppmĂ€rksamma det och fördjupa mig i litteraturen. Men det hĂ€r inlĂ€gget handlar inte om vilket som Ă€r bĂ€ttre â Python eller Go: Det finns ett stort antal jĂ€mförelser pĂ„ Internet. Enligt min mening beror allt pĂ„ applikationen. Jag ska prata om varför jag valde Go, ge nĂ„gra tips 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" - en rabatt pÄ 10 000 rubel nÀr du anmÀler dig till nÄgon Skillbox-kurs med hjÀlp av "Habr"-kampanjkoden.

Observationer
Det första jag gjorde i början av min resa var att studera den utmÀrkta officiella handledningen "" Det ger en förstÄelse för sprÄkets syntax.
För att förbĂ€ttra mina kunskaper lĂ€ste jag Ă€ven boken ââ, vilket gjorde att vi kunde gĂ„ vidare till nĂ€sta steg - försök och misstag.
Jag tog de vÀlbekanta funktionerna jag anvÀnde i Python (JSON-serialisering eller hantering av HTTP-anrop) och försökte skriva dem i Go. Tack vare denna tydliga jÀmförelse kunde jag identifiera viktiga skillnader mellan sprÄk.
Projektlayout
Först och frÀmst krÀver Python ingen specifik kataloghierarki, medan Go gör det.
Go anvÀnder "standard" layouten, som Àr lite mer komplex och krÀver mer arbete. à andra sidan Àr resultatet en vÀlstrukturerad kodbas som anvÀnder en modulÀr struktur, och koden förblir strikt organiserad nÀr projektet expanderar.
Officiell handledning "â förklarar hur du organiserar ditt arbete.
Statisk stark skrivning
Go Àr statiskt skrivna, vilket kommer att fÄ de som Àr vana vid dynamiskt skrivna sprÄk som Python och Ruby att kÀnna sig obekvÀma.
Det rÄder ingen tvekan om att dynamiska sprÄk Àr mer felbenÀgna och krÀver mer anstrÀngning frÄn utvecklarens sida för att validera indata. Ett exempel Àr en funktion som berÀknar summan av tvÄ heltal. Om du skickar en strÀng till en funktion (vilket inte Àr sÄ ovanligt) kommer det att resultera i ett TypeError.
Detta kan inte hÀnda i Go eftersom du mÄste deklarera en typ för varje variabel och funktion och vilken typ av variabel funktionen kommer att returnera.
Först var det irriterande â jag trodde att den hĂ€r funktionen i Go saktade ner saker och ting â men sedan insĂ„g jag att att deklarera allt faktiskt sparar tid och minskar sannolikheten för fel.
Infödd samtidighet
Go har inbyggt samtidighetsstöd med hjÀlp av subrutiner och pipes, vilket Àr bekvÀmt.
Konceptet med kanaler verkar lite förvirrande till en början. Men med tiden blir det tydligare och du börjar njuta av nya möjligheter och aktivt arbeta med dem.
HÀr Àr en visualisering av allt som sÀgs frÄn .
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
} 
Fler exempel Đž .
Jobbar med JSON
Tja, json.loads() finns inte lÀngre. I Python Àr allt enkelt: vi anvÀnder json.loads, och det finns inga problem.
Men i Go, ett statiskt maskinskrivet sprÄk, blir denna operation mer komplex.
HÀr, nÀr du anvÀnder JSON, Àr allt fördefinierat. Alla fÀlt som inte passar in i den givna strukturen kommer att ignoreras, vilket Àr bra. Du kan se det som ett pÄ förhand överenskommet protokoll mellan tvÄ parter. Datan du fÄr i JSON bör vara vad du förvÀntar dig, och JSON-fÀlten och -typerna bör "överenskommas" 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"`
}Naturligtvis kan du deserialisera JSON utan strukturer, men detta bör undvikas om möjligt och sprÄkets statiska karaktÀr bör beaktas.
Att avkoda JSON pÄ GO Àr bÀst eller .
För lat för att konvertera din JSON till en Go-struktur? Inga problem, .
Ren kod
Go-kompilatorn kommer alltid att försöka hÄlla din kod ren. Den anser att oanvÀnda variabler Àr ett kompileringsfel. Go anvÀnder ett unikt tillvÀgagÄngssÀtt som gör att systemet kan lösa de flesta formateringsproblem. SÄ, Go kommer att köra gofmt-programmet nÀr du sparar eller kompilerar och korrigerar sjÀlva formateringen.
Bryr du dig inte om variabler? ok! AnvÀnd bara _ (understreck) och tilldela det till ett tomt id.
Mastrids handledning för den hÀr delen av att arbeta med 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 med Python, sÄ jag var rÀdd att jag inte skulle hitta nÄgot lÀmpligt för Go.
Men samhÀllet har redan löst dessa problem: sprÄket har sina egna unika bibliotek som gör att du helt kan glömma vad du anvÀnde tidigare.
HÀr Àr mina favoriter.
Python Requests => net/http
ger en bekvÀm och lÀttanvÀnd HTTP-klient- och serverimplementering.
Kolv + Jinja2 => Gin
- HTTP-webbramverk med ett mycket enkelt API: sökvÀgsparametrar, nedladdningsbara filer, grupprouting (/api/v1, /api/v2), anpassade loggformat som serverar statiska filer, HTML-rendering och riktigt kraftfull anpassad mellanprogramvara.
BetygsÀtta riktmÀrke.
CLI Creation => Cobra
â ett bibliotek för att skapa kraftfulla CLI-applikationer, samt ett program för att generera applikationer och batchfiler.
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 denna fantastiska lista - .
Andra anvÀndbara resurser
[1] â- Du mĂ„ste definitivt utvĂ€rdera dessa Đž .
[2] . [3] . [4] , , â Twitter-konton.Sammanfattningsvis
Efter att ha varit en vanlig Python-anvÀndare i fem Är var jag rÀdd att det skulle vara smÀrtsamt att byta till Go.
Men nej: det finns arbete frÄn Go-communityt som utökar och kompletterar sprÄkets möjligheter, samt olika anvÀndbara resurser som hjÀlper dig med övergÄngen.
Go vÀxer snabbt, och jag hoppas att Google kan göra det till det primÀra sprÄket för att skriva molnapplikationer och infrastruktur.
ĐŃĐžŃĐŸĐ”ĐŽĐžĐœŃĐčŃĐ”ŃŃ!

Skillbox rekommenderar:
- TvÄÄrig praktisk kurs .
- Pedagogisk onlinekurs .
- Praktisk Ärskurs .
KĂ€lla: will.com
