Min vei fra Python til Go — jeg deler rĂ„d og ressurser

Min vei fra Python til Go — jeg deler rĂ„d og ressurser

Fra oversetteren: oversatt for deg artikkelen til Ilya Leev om overgangen fra Python til Go. Artikkelen vil vÊre nyttig for ikke bare nybegynnere, men for alle som er interessert i Go pÄ en eller annen mÄte.

Jeg liker Python. Dette sprÄket har vÊrt min favoritt de siste fem Ärene. Det er brukervennlig, effektivt, og lett Ä lÊre. Det brukes nesten til alt: fra Ä lage enkle skript og webutvikling til datavisualisering og maskinlÊring

Den gradvise «modningen» av Go, det omfattende fellesskapet og det faktum at stadig flere selskaper tar dette sprĂ„ket i bruk etter vellykkede tester, fikk meg til Ă„ rette oppmerksomheten mot det og dykke ned i litteraturen. Men dette innlegget handler ikke om hva som er best — Python eller Go: det finnes et stort antall sammenligninger pĂ„ nettet. Etter min mening avhenger alt av bruksomrĂ„det. Jeg skal fortelle hvorfor jeg valgte Go, og gi noen rĂ„d og lenker til nyttige ressurser for alle som er interessert i emnet.

Skillbox anbefaler: Praktisk kursus Python-utvikler fra bunnen av.

Vi minner om: for alle lesere av «Habr» — 10 000 rubler rabatt ved pĂ„melding til hvilket som helst Skillbox-kurs med kampanjekoden «Habr».

Min vei fra Python til Go — jeg deler rĂ„d og ressurser

Observasjoner

Det fĂžrste jeg gjorde i begynnelsen av min vei, var Ă„ studere den utmerkede offisielle tutorialen “Tour Of Go”. Den gir en forstĂ„else av sprĂ„kets syntaks.

For Ă„ forbedre kunnskapene mine leste jeg ogsĂ„ boken “Go for Python Programmers”, som tillot meg Ă„ gĂ„ videre til neste fase — prĂžving og feiling.

Jeg tok vanlige funksjoner jeg brukte i Python (JSON-serialisering eller arbeid med HTTP-anrop), og prÞvde Ä skrive dem i Go. Gjennom denne tydelige sammenligningen klarte jeg Ä avdekke nÞkkelforskjellene mellom sprÄkene.

Prosjektstruktur

Fremfor alt krever ikke Python en spesifikk kataloghierarkisk struktur, mens Go gjĂžr det.

Go bruker en «standard» oppsett som er litt mer komplisert og krever mer arbeid. PÄ den annen side fÄr vi en godt strukturert kodebase, der moduler brukes, og nÄr prosjektet utvides forblir koden strengt organisert.

Den offisielle tutorialen “How to Write Go Code” forklarer hvordan man organiserer arbeidet sitt.

Statisk sterk typisering

Go er statisk typet, og dette vil fÄ de som er vant til dynamisk typede sprÄk som Python og Ruby til Ä fÞle seg utrivelige.

Det er ingen tvil om at dynamiske sprÄk er mer utsatt for feil, og det kreves mer innsats fra utviklerens side for Ä validere inndata. Et eksempel er en funksjon som beregner summen av to heltall. Hvis en streng sendes til funksjonen (hvilket skjer ganske ofte), vil det fÞre til en TypeError.

I Go kan ikke dette skje, fordi man mÄ deklarere typen for hver variabel og funksjon, og hvilken type variable funksjonen vil returnere.

FÞrst er det irriterende: jeg trodde at denne egenskapen til Go senket ytelsen, men sÄ kom forstÄelsen om at det Ä deklarere alt faktisk sparer tid, og reduserer sannsynligheten for feil.

Nativ parallellisme

Go har native stþtte for parallellisme ved bruk av gorutiner og kanaler — det er praktisk.

Konseptet med kanaler kan virke litt forvirrende i begynnelsen. Men over tid blir det mer forstÄelig, og du begynner Ä nyte de nye mulighetene ved aktivt Ä jobbe med dem.

Her er en visualisering av alt som ble sagt fra Ivan Danilyuk.

package main
 
func main() {
    // opprett ny kanal av typen int
    ch := make(chan int)
 
    // start ny anonym goroutine
    go func() {
        // send 42 til kanalen
        ch <- 42
    }()
    // les fra kanalen
    <-ch
}

Min vei fra Python til Go — jeg deler rĂ„d og ressurser

Flere eksempler her og her.

Jobbe med JSON

Vel, json.loads() finnes ikke lenger. I Python er alt enkelt: vi bruker json.loads, og det er ingen problemer.

Men i Go, et statisk typet sprÄk, blir denne operasjonen mer komplisert.

Her, nÄr man bruker JSON, er alt pÄ forhÄnd definert. Ethvert felt som ikke passer inn i den gitte strukturen vil bli ignorert, og det er bra. Man kan tenke pÄ dette som en forhÄndsavtalt protokoll mellom to parter. Dataene du mottar i JSON bÞr vÊre forventede, og feltene og typene JSON er 'enige' mellom begge 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"`
}

SelvfÞlgelig kan du deserialisere JSON uten strukturer, men det bÞr unngÄs der det er mulig og ta hensyn til sprÄkets statiske natur.

Dekodering av JSON i GO er best forklart i dette innlegget eller her.

Er du lat med Ă„ konvertere JSON til Go-struktur? Ingen problemer, dette verktĂžyet vil gjĂžre alt for deg.

Ryddig kode

Go-kompilatoren vil alltid prÞve Ä holde koden din «ren». Den anser ubrukte variabler som en kompilasjonsfeil. Go bruker en unik tilnÊrming som lar systemet lÞse de fleste formateringsproblemene. SÄ Go vil kjÞre programmet gofmt ved lagring eller kompilering og selv fikse formateringen.

Bryr du deg ikke om variabler? Greit! Bare bruk _ (underscore) og tildel den til en tom identifikator.

En masterclass med dette sprĂ„ket er informasjon fra “Effective Go”.

SĂžking etter passende biblioteker og rammeverk

Jeg har brukt rammeverk og biblioteker som Flask, Jinja2, Requests og til og med Kazoo med Python, sÄ jeg var redd jeg ikke ville finne noe passende for Go.

Men fellesskapet har allerede lÞst disse problemene: sprÄket har sine egne unike biblioteker som lar deg fullstendig glemme hva du har brukt tidligere.

Her er mine favoritter.

Python Requests => net/http

net/http tilbyr en praktisk og brukervennlig implementering av HTTP-klient og server.

Flask + Jinja2 => Gin

Gin er et HTTP-rammeverk med et veldig enkelt API: parametere i stien, opplastede filer, gruppering av ruter (/ api / v1, / api / v2), tilpassede loggformater, servering av statiske filer, HTML-rendering og svĂŠrt kraftig tilpasset middleware.
Vurder materialet. benchmark.

CLI Creation => Cobra

Cobra er et bibliotek for Ă„ lage kraftige CLI-applikasjoner, samt et program for Ă„ generere applikasjoner og kommandofiler.
Cobra brukes i mange store Go-prosjekter, inkludert Kubernetes, etcd og OpenShift.

Her er noen flere biblioteker jeg sterkt anbefaler: Viper, Gonfig og denne fantastiske listen — Awesome-Go.

Andre nyttige ressurser

[1] Francesc Campoy  —  du mĂ„ definitivt sjekke ut disse YouTube-kanalen og GitHub-profilen.

[2] GopherCon — videoene.

[3] Go Web-eksempler.

[4] Golang Weekly, Gopher Academy, Golang News — Twitter-kontoer.

Oppsummering

Som en aktiv bruker av Python i fem Är, var jeg redd for at overgangen til Go ville vÊre smertefull.

Men nei: det er mange ressurser fra Go-fellesskapet som utvider og komplementerer sprÄkets evner, samt ulike nyttige ressurser som vil hjelpe deg med overgangen.

Go utvikler seg raskt, og jeg hÄper at Google vil gjÞre det til det dominerende sprÄket for skriving av skyapplikasjoner og infrastruktur.

Bli med!

Min vei fra Python til Go — jeg deler rĂ„d og ressurser

Skillbox anbefaler:

Kilde: habr.com

KjĂžp pĂ„litelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere đŸ”„ KjĂžp pĂ„litelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere | ProHoster