
Nga përkthyesi: kemi përkthyer . Artikulli do të jetë i dobishëm jo vetëm për programuesit fillestarë, por edhe për të gjithë ata që janë ndryshe të interesuar për Go.
MĂ« pĂ«lqen Python. Ky gjuhĂ« ka qenĂ« preferenca ime pĂ«r pesĂ« vitet e fundit. ĂshtĂ« miqĂ«sore, efikase dhe e lehtĂ« pĂ«r t'u mĂ«suar. PĂ«rdoret pĂ«r çdo gjĂ«: nga krijimi i skripteve tĂ« thjeshta dhe zhvillimi web deri te vizualizimi i tĂ« dhĂ«nave dhe mĂ«simi automatik.
Rritja e gradualshme e Go, komuniteti i gjerë dhe fakti që gjithnjë e më shumë kompani po e adoptojnë këtë gjuhë pas testeve të suksesshme, më kanë motivuar të shkëlqehem në të dhe të zbuloj literaturën. Por ky post nuk është për atë se cila është më e mirë - Python apo Go: ka shumë krahasime në internet. Sipas mendimit tim, gjithçka varet nga fusha e aplikimit. do të flas për arsyen pse zgjodha Go, duke dhënë disa këshilla dhe lidhje me burime të dobishme për të gjithë ata që janë të interesuar në temë.
Skillbox rekomandon: Kurs praktik .
KujtojmĂ«: pĂ«r tĂ« gjithĂ« lexuesit e "Habra" â zbritje prej 10,000 rublej pĂ«r regjistrimin nĂ« çdo kurs Skillbox me kodin promocional "Habr".

Vëzhgimet
E parĂ« qĂ« bĂ«ra nĂ« fillim tĂ« rrugĂ«timit tim ishte tĂ« studionja tutorialin e shkĂ«lqyer zyrtar ââ. Ai jep njĂ« kuptim tĂ« sintaksĂ«s sĂ« gjuhĂ«s.
PĂ«r tĂ« pĂ«rmirĂ«suar njohuritĂ«, kam lexuar gjithashtu librin ââ, i cili mĂ« lejuan tĂ« kaloj nĂ« njĂ« fazĂ« tjetĂ«r - provat dhe gabimet.
Mora funksionet e zakonshme qĂ« pĂ«rdorja nĂ« Python (sa i pĂ«rket serializimit JSON ose punĂ«s me thirrje HTTP) dhe provoja tâi shkruaj ato nĂ« Go. FalĂ« kĂ«tij krahasimi vizual, arrita tĂ« identifikoj dallimet kyçe midis gjuhĂ«ve.
Struktura e projektit
Së pari, Python nuk kërkon një hierarki specifike katalogësh, ndërsa Go e kërkon atë.
Go pĂ«rdor njĂ« strukturĂ« âstandardâ qĂ« Ă«shtĂ« pak mĂ« e ndĂ«rlikuar dhe kĂ«rkon punĂ« mĂ« tĂ« madhe. Nga ana tjetĂ«r, nĂ« rezultat, ne marrim njĂ« bazĂ« kodimi tĂ« mirĂ«strukturuar, ku pĂ«rdoret njĂ« strukturĂ« modulare, dhe kur projekti zgjerohet, kodi mbetet nĂ« rregull tĂ« qartĂ«.
Tutoriali zyrtar ââ shpjegon se si tĂ« organizoni punĂ«n tuaj.
Të dhëna të forta statike
Go është i tipizuar statikisht, dhe kjo do t'i bëjë disa të ndihen të papërshtatshëm ata që janë mësuar me gjuhët e tipizuara dinamike si Python dhe Ruby.
Nuk ka dyshim se gjuhët dinamike janë më të prirura për gabime, kërkohet më shumë përpjekje nga zhvilluesi për të verifikuar të dhënat hyrëse. Një shembull - një funksion që llogarit shumën e dy numrave të plotë. Nëse dërgoni një varg në funksion (çka ndodh jo shumë shpesh), atëherë kjo do të rezultojë në një gabim TypeError.
Në Go, kjo nuk mund të ndodhi sepse këtu është e nevojshme të deklaroni llojin për çdo variabël dhe funksion dhe se çfarë lloj variabli do të kthejë funksioni.
Në fillim, kjo ishte e bezdisshme: më dukej se ky veçori i Go e ngadalëson punën, - por më pas kuptova se në të vërtetë deklarimi i gjithçkaje kursen kohë, dhe probabiliteti i gabimeve ulet.
Paralelizmi natyror
Go ka mbështetje natyrale për paralelizmin duke përdorur nënprograme dhe kanale - kjo është e dobishme.
Koncepci e kanaleve në fillim duket pak e komplikuar. Megjithatë, me kalimin e kohës ajo bëhet më e qartë, dhe filloni të shijoni mundësitë e reja, duke punuar aktivisht me to.
Ja një vizualizim i gjithçkaje të përmendur nga .
package main
func main() {
// krijoni një kanal të ri të tipit int
ch := make(chan int)
// filloni një gorutinë anonime të re
go func() {
// dërgoni 42 në kanal
ch <- 42
}()
// lexoni nga kanali
<-ch
} 
Më shumë shembuj dhe .
Puna me JSON
Epo, json.loads() nuk ekziston më. Në Python gjithçka është e thjeshtë: përdorim json.loads dhe nuk ka probleme.
Por në Go, një gjuhë e tipizuar statikisht, kjo operacion bëhet më e komplikuar.
KĂ«tu me pĂ«rdorimin e JSON gjithçka Ă«shtĂ« e paracaktuar. Ădo fushĂ« qĂ« nuk pĂ«rfshihet nĂ« strukturĂ«n e caktuar do tĂ« injorohet dhe kjo Ă«shtĂ« njĂ« gjĂ« e mirĂ«. Mund ta mendoni si njĂ« protokoll tĂ« paracaktuar midis dy palĂ«ve. TĂ« dhĂ«nat qĂ« keni marrĂ« nĂ« JSON duhet tĂ« priten, dhe fushat dhe llojet e JSON-it janĂ« 'tĂ« miratuara' nga tĂ« dyja palĂ«t.
{
â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"`
}Sigurisht, mund të deserializoni JSON pa struktura, por kjo duhet të shmanget sa më shumë të jetë e mundur dhe të merren parasysh natyra statike e gjuhës.
Dekodimi i JSON në GO shpjegohet më së miri ose .
Jeni të lodhur të konvertoni JSON tuaj në strukturën Go? Asnjë problem, .
Kod i pastër
Kompilatori Go do të mundohet gjithmonë ta mbajë kodin tuaj "të pastër". Ai e konsideron variablët e pa përdorur një gabim në kompilim. Go përdor një qasje unike që lejon sistemin të zgjidhë shumicën e problemeve të formatimit. Kështu, Go do të ekzekutojë programin gofmt gjatë ruajtjes ose kompilimit dhe do ta rregullojë vetë formatimin.
Nuk ju interesojnë variablat? Mirë! Thjesht përdorni _ (nënvizim) dhe caktoni atë si një identifikator të zbrazët.
MĂ«nyra mĂ« e mirĂ« pĂ«r t'u mĂ«suar nĂ« kĂ«tĂ« pjesĂ« tĂ« punĂ«s me gjuhĂ«n Ă«shtĂ« informata nga ââ.
Të gjejmë libraritë dhe kornizat e duhura
Kam përdorur korniza dhe librari si Flask, Jinja2, Requests, madje edhe Kazoo me Python, prandaj u frikësova se nuk do të gjeja asgjë të përshtatshme për Go.
Por komuniteti tashmë i ka zgjidhur këto probleme: gjuhën ka libra të saj unikë që lejojnë të harrosh plotësisht për ato që ke përdorur më parë.
Këtu janë preferencat e mia.
Python Requests => net/http
ofron një zbatim të lehtë dhe të përshtatshëm të klientit dhe serverit HTTP.
Flask + Jinja2 => Gin
â njĂ« kornizĂ« HTTP me njĂ« API shumĂ« tĂ« thjeshtĂ«: parametra nĂ« rrugĂ«, ngarkesa skedarĂ«sh, rregullimi i grupeve (/ api / v1, / api / v2), formate tĂ« personalizuara tĂ« regjistrit, shĂ«rbimi i skedarĂ«ve statikĂ«, renderimi HTML dhe njĂ« middleware tĂ« fuqishme tĂ« personalizuara.
Vlerësoni benchmark.
Krijimi i CLI => Cobra
â njĂ« bibliotekĂ« pĂ«r krijimin e aplikacioneve CLI tĂ« fuqishme, si dhe njĂ« program pĂ«r gjenerimin e aplikacioneve dhe skedarĂ«ve tĂ« komandave.
Cobra përdoret në shumë projekte të mëdha Go, përfshirë Kubernetes, etcd dhe OpenShift.
Ja disa libra tĂ« tjerĂ« qĂ« unĂ« me tĂ« vĂ«rtetĂ« rekomandoj: , dhe ky listĂ« fantastike â .
Burime të tjera të dobishme
[1] ââ âju duhet patjetĂ«r tĂ« shikoni kĂ«to dhe .
[2] .
[3] .
[4] , , â llogaritĂ« nĂ« Twitter.
Përmbledhje
Duke qenë një përdorues i rregullt i Python për pesë vjet, u frikësova se kalimi në Go do të ishte i dhimbshëm.
Por jo: ka përpjekje nga komuniteti Go që zgjerojnë dhe plotësojnë kapacitetet e gjuhës, si dhe burime të ndryshme të dobishme që do t'ju ndihmojnë në kalim.
Go po zhvillohet shpejt, dhe shpresoj që Google ta bëjë atë gjuhën kryesore për zhvillimin e aplikacioneve dhe infrastrukturës në re.
Bashkohuni!

Skillbox rekomandon:
- Kurs praktik dyvjeçar .
- Kurs online edukativ .
- Kurs praktik njëvjeçar .
Burimi: habr.com
