
Nga përkthyesi: përkthyer . Artikulli do të jetë i dobishëm jo vetëm për programuesit fillestarë, por edhe për të gjithë ata që kanë ndonjë interes për Go.
Më pëlqen Python. Ky gjuhë ka qenë preferenca ime për pesë vitet e fundit. Ai është miqësor, efektiv dhe lehtësisht mësohet. Përdoret për gati çdo gjë: nga krijimi i skripteve të thjeshta dhe zhvillimi i uebit deri te vizualizimi i të dhënave dhe mësimi i makinerive.
Rritja graduale e Go, komuniteti i gjerĂ« dhe fakti qĂ« gjithnjĂ« e mĂ« shumĂ« kompani e pranojnĂ« kĂ«tĂ« gjuhĂ« pas testeve tĂ« suksesshme, mĂ« bĂ«nĂ« tĂ« fokusohesha nĂ« tĂ« dhe tĂ« thellohem nĂ« literaturĂ«. Por ky post nuk Ă«shtĂ« pĂ«r atĂ« se cila Ă«shtĂ« mĂ« e mirĂ« â Python apo Go: ka njĂ« numĂ«r tĂ« madh krahasimesh nĂ« rrjet. Sipas mendimit tim, gjithçka varet nga fusha e ndĂ«rlikimit. UnĂ« do tĂ« flas mbi arsyet se pse zgjodha Go, duke dhĂ«nĂ« disa kĂ«shilla dhe linke pĂ«r 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 rublesh pĂ«r regjistrimin nĂ« çdo kurs Skillbox me kodin promovues «Habr».

Vëzhgimet
GjĂ«ja e parĂ« qĂ« bĂ«ra nĂ« fillim tĂ« rrugĂ«s ishte tĂ« studjoja udhĂ«zimin e shkĂ«lqyer zyrtar ââ. Ai ofron njĂ« kuptim tĂ« sintaksĂ«s sĂ« gjuhĂ«s.
PĂ«r tĂ« pĂ«rmirĂ«suar njohuritĂ«, lexova gjithashtu librin ââ, qĂ« mĂ« lejon tĂ« kaloj nĂ« fazĂ«n tjetĂ«r â provat dhe gabimet.
Mora funksionet e njohura që përdorja në Python (serializimi i JSON ose punë me thirrjet HTTP) dhe provova t'i shkruaj ato në Go. Falë kësaj krahasimi vizual, arrita të identifikoj dallimet kryesore mes gjuhëve.
Organizimi i projektit
SĂ« pari, Python nuk kĂ«rkon njĂ« hierarki specifike katalogĂ«sh, ndĂ«rsa Go â po.
Go pĂ«rdor njĂ« organizim âstandardâ, i cili Ă«shtĂ« pak mĂ« i ndĂ«rlikuar dhe kĂ«rkon mĂ« shumĂ« punĂ«. Nga ana tjetĂ«r, si rezultat marrim njĂ« bazĂ« kodi tĂ« strukturuar mirĂ«, ku pĂ«rdoret njĂ« strukturĂ« modulare, dhe kur zgjerohet projekti, kodi mbetet strikt i organizuar.
UdhĂ«zimi zyrtar ââ shpjegon si tĂ« organizoni punĂ«n tuaj.
Tipizimi strikt statik
Go është i tipizuar statikisht, dhe kjo do ta bëjë të ndihen jo në vendin e duhur ata që janë mësuar me gjuhët e tipizuar dinamik si Python dhe Ruby.
Nuk ka dyshim që gjuhët dinamike janë më të prirura për gabime, dhe kërkohet më shumë përpjekje nga ana e zhvilluesit për të verifikuar të dhënat hyrëse. Një shembull është funksioni që llogarit shumën e dy numrave të tërë. Nëse një varg i dërgohet funksionit (çka ndodh jo aq shpesh), kjo do të çojë në një gabim TypeError.
Në Go kjo nuk mund të ndodhë, sepse këtu kërkohet që të shpallej tipi për çdo variabël dhe funksion, si dhe cili tip variabeli do të kthejë funksioni.
Fillimisht, kjo Ă«shtĂ« e bezdisshme: mĂ« dukej se kjo veçori e Go e ngadalĂ«son punĂ«n â por mĂ« vonĂ« erdhi kuptimi se nĂ« tĂ« vĂ«rtetĂ« shpallja e gjithçkaje kursen kohĂ« dhe ul mundĂ«sinĂ« e gabimeve.
Paralelizmi nativ
Go ka mbĂ«shtetje nativ pĂ«r paralelizmin duke pĂ«rdorur nĂ«nprogramet dhe kanalet â kjo Ă«shtĂ« komode.
Koncepti i kanaleve fillimisht duket paksa i ngatërruar. Megjithatë, ndërsa kalon koha, ai bëhet më i qartë dhe filloni të shijoni mundësitë e reja duke punuar aktivisht me to.
Ja vizualizimi i gjithçkaje të thënë nga .
package main
func main() {
// krijo kanal të ri të tipit int
ch := make(chan int)
// fillo nënprogramin anonim
go func() {
// dërgo 42 në kanal
ch <- 42
}()
// lexoj nga kanali
<-ch
} 
Më shumë shembuj dhe .
Puna me JSON
Eh, json.loads() nuk është më. Në Python ë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, duke pĂ«rdorur JSON gjithçka Ă«shtĂ« e pĂ«rcaktuar paraprakisht. Ădo fushe qĂ« nuk pĂ«rputhet me strukturĂ«n e caktuar do tĂ« injorohet, dhe kjo Ă«shtĂ« mirĂ«. Mund ta mendoni kĂ«tĂ« si njĂ« protokoll tĂ« miratuar paraprakisht midis dy palĂ«ve. TĂ« dhĂ«nat qĂ« merrni nĂ« JSON duhet tĂ« janĂ« tĂ« pritura, dhe fushat dhe tipet e JSON janĂ« "tĂ« miratuara" nga tĂ« dy 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 sa herë që është e mundur duhet të hiqni dorë nga kjo dhe të keni parasysh natyrën statike të gjuhës.
Dekodimi i JSON në GO është më së miri ose .
A keni përrallë të konvertoni JSON tuaj në strukturë Go? Asnjë problem, .
Kodi i pastër
Kompilatori Go gjithmonë do të përpiqet të mbajë kodin tuaj «të pastër». Ai e konsideron variablat e pa përdorura si një gabim kompilimi. Go përdor një qasje unike që i lejon sistemit të zgjidhë shumicën e problemeve të formatimit. Në këtë mënyrë, Go do të ekzekutojë programin gofmt gjatë ruajtjes ose kompilimit dhe do të korrigjojë vetë formatimin.
Nuk keni rëndësi për variablat? Mirë! Thjesht përdorni _ (nënvijëzim) dhe caktoni atë një identifikuesi të zbrazët.
NjĂ« burim tĂ« shkĂ«lqyer pĂ«r kĂ«tĂ« pjesĂ« tĂ« punĂ«s me gjuhĂ«n Ă«shtĂ« informacioni nga ââ.
Gjetja e bibliotekave dhe frameworkeve të përshtatshme
Kam përdorur frameworke dhe biblioteka si Flask, Jinja2, Requests dhe madje Kazoo me Python, kështu që kisha frikë se nuk do të gjeja asgjë të përshtatshme për Go.
Por komuniteti tashmë ka zgjidhur këto probleme: gjuha ka bibliotekat e saj unike që e lejojnë plotësisht të harroni atë që keni përdorur më parë.
Ja favoritet e mia.
Python Requests => net/http
ofron një implementim të lehtë dhe të përdorshëm të klientit dhe serverit HTTP.
Flask + Jinja2 => Gin
â njĂ« framework HTTP me njĂ« API shumĂ« tĂ« thjeshtĂ«: parametrat nĂ« rrugĂ«, skedarĂ« tĂ« ngarkuar, grupe rrugĂ«zimi (/api/v1, /api/v2), formate tĂ« personalizuara pĂ«r regjistrimin, shĂ«rbim tĂ« skedarĂ«ve statikĂ«, renderim HTML dhe njĂ« middleware tĂ« vĂ«rtetĂ« tĂ« fuqishĂ«m.
Vlerësoni benchmark.
Krijimi i CLI => Cobra
â njĂ« bibliotekĂ« pĂ«r krijimin e aplikacioneve tĂ« fuqishme CLI, si dhe njĂ« program pĂ«r gjenerimin e aplikacioneve dhe skedarĂ«ve komandor.
Cobra përdoret në shumë projekte të mëdha Go, përfshirë Kubernetes, etcd dhe OpenShift.
Ja disa biblioteka tĂ« tjera qĂ« unĂ« i rekomandoj shumĂ«: , dhe ky listĂ« mahnitĂ«se â .
Burime të tjera të dobishme
[1] ââ âju duhet tĂ« vlerĂ«soni kĂ«to dhe .
[2] .
[3] .
[4] , , â llogaritĂ« nĂ« Twitter.
Të shohim përfundimet
Duke qenë një përdorues i rregullt i Python për pesë vjet, kisha frikë se kalimi në Go do të ishte i dhimbshëm.
Por jo: ka përvoja të komunitetit Go, e cila zgjerohet dhe plotëson kapacitetet e gjuhës, si dhe burime të ndryshme të dobishme që do t'ju ndihmojnë me kalimin.
Go po zhvillohet shpejt, dhe shpresoj që Google të mund ta bëjë atë gjuhën kryesore për ndërtimin e aplikacioneve dhe infrastrukturës në re.
Bashkohuni!

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