Min resa frÄn Python till Go - dela tips och resurser

Min resa frÄn Python till Go - dela tips och resurser

FrÄn översÀttaren: översatt För dig, Ilad Leevs artikel om övergÄngen frÄn Python till Go. 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 Python-utvecklare frÄn grunden.

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.

Min resa frÄn Python till Go - dela tips och resurser

Observationer

Det första jag gjorde i början av min resa var att studera den utmÀrkta officiella handledningen "Tour Of Go" Det ger en förstÄelse för sprÄkets syntax.

För att förbĂ€ttra mina kunskaper lĂ€ste jag Ă€ven boken ”GĂ„ till Python-programmerare”, 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 "Hur man skriver Go-kod” 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 Ivan Danilyuk.

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
}

Min resa frÄn Python till Go - dela tips och resurser

Fler exempel hÀr О hÀr.

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 förklaras i detta inlÀgg eller hÀr.

För lat för att konvertera din JSON till en Go-struktur? Inga problem, detta verktyg kommer att göra allt för dig.

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

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

net/http ger en bekvÀm och lÀttanvÀnd HTTP-klient- och serverimplementering.

Kolv + Jinja2 => Gin

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 detta riktmÀrke.

CLI Creation => Cobra

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: Huggorm, Gonfig och denna fantastiska lista - Fantastiskt-Go.

Andra anvÀndbara resurser

[1] Francesc Campoy  - Du mĂ„ste definitivt utvĂ€rdera dessa Youtube-kanal Đž GitHub-profil.

[2] GopherCon - video. [3] Go Web Exempel. [4] Golang Weekly, Gopher Academy, Golang nyheter — 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.

ĐŸŃ€ĐžŃĐŸĐ”ĐŽĐžĐœŃĐčŃ‚Đ”ŃŃŒ!

Min resa frÄn Python till Go - dela tips och resurser

Skillbox rekommenderar:

KĂ€lla: will.com