Rruga ime nga Python nĂ« Go — ndajem kĂ«shilla dhe burime

Rruga ime nga Python nĂ« Go — ndajem kĂ«shilla dhe burime

Nga përkthyesi: kemi përkthyer për ju artikullin e Ilad Leeves mbi kalimin nga Python në Go. 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 Programues Python nga fillimi.

KujtojmĂ«: pĂ«r tĂ« gjithĂ« lexuesit e "Habra" — zbritje prej 10,000 rublej pĂ«r regjistrimin nĂ« çdo kurs Skillbox me kodin promocional "Habr".

Rruga ime nga Python nĂ« Go — ndajem kĂ«shilla dhe burime

Vëzhgimet

E parĂ« qĂ« bĂ«ra nĂ« fillim tĂ« rrugĂ«timit tim ishte tĂ« studionja tutorialin e shkĂ«lqyer zyrtar “Tour Of Go”. Ai jep njĂ« kuptim tĂ« sintaksĂ«s sĂ« gjuhĂ«s.

PĂ«r tĂ« pĂ«rmirĂ«suar njohuritĂ«, kam lexuar gjithashtu librin “Go for Python Programmers”, 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 “How to Write Go Code” 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 Ivan Daniliuk.

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
}

Rruga ime nga Python nĂ« Go — ndajem kĂ«shilla dhe burime

Më shumë shembuj këtu dhe këtu.

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 në këtë post ose këtu.

Jeni të lodhur të konvertoni JSON tuaj në strukturën Go? Asnjë problem, ky mjet do ta bëjë gjithçka për ju.

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 “Effective Go”.

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

net/http ofron një zbatim të lehtë dhe të përshtatshëm të klientit dhe serverit HTTP.

Flask + Jinja2 => Gin

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 këtë benchmark.

Krijimi i CLI => Cobra

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: Viper, Gonfig dhe ky listĂ« fantastike — Awesome-Go.

Burime të tjera të dobishme

[1] Francesc Campoy  —  ju duhet patjetĂ«r tĂ« shikoni kĂ«to Kanali YouTube dhe profilin GitHub.

[2] GopherCon — video.

[3] Go Web Examples.

[4] Golang Weekly, Gopher Academy, Golang News — 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!

Rruga ime nga Python nĂ« Go — ndajem kĂ«shilla dhe burime

Skillbox rekomandon:

Burimi: habr.com

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster