
Fra oversetteren: oversatt . 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 .
Vi minner om: for alle lesere av «Habr» â 10 000 rubler rabatt ved pĂ„melding til hvilket som helst Skillbox-kurs med kampanjekoden «Habr».

Observasjoner
Det fĂžrste jeg gjorde i begynnelsen av min vei, var Ă„ studere den utmerkede offisielle tutorialen ââ. Den gir en forstĂ„else av sprĂ„kets syntaks.
For Ă„ forbedre kunnskapene mine leste jeg ogsĂ„ boken ââ, 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 ââ 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 .
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
} 
Flere eksempler og .
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 eller .
Er du lat med Ă„ konvertere JSON til Go-struktur? Ingen problemer, .
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 ââ.
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
tilbyr en praktisk og brukervennlig implementering av HTTP-klient og server.
Flask + Jinja2 => 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 benchmark.
CLI Creation => 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: , og denne fantastiske listen â .
Andre nyttige ressurser
[1] ââ âdu mĂ„ definitivt sjekke ut disse og .
[2] .
[3] .
[4] , , â 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!

Skillbox anbefaler:
- ToÄrig praktisk kurs .
- Nettbasert utdanningskurs .
- Praktisk ettÄrig kurs .
Kilde: habr.com
