Minu tee Pythonist Go peale — jagan nĂ€punĂ€iteid ja ressursse

Minu tee Pythonist Go peale — jagan nĂ€punĂ€iteid ja ressursse

TĂ”lkijalt: moved teile Ilya Leeva artiklit Pythonilt Go peale ĂŒlemineku teemal. Artikkel on kasulik mitte ainult algajatele programmeerijatele, vaid ka kĂ”ikidele, kes on mingil moel huvitatud Go-st.

Mulle meeldib Python. See keel on olnud minu lemmik viimased viis aastat. See on sÔbralik, efektiivne ja seda on lihtne Ôppida. Seda kasutatakse praktiliselt kÔiges: alates lihtsatest skriptidest ja veebiarendusest kuni andmete visualiseerimise ja masinÔppeni.

Go jĂ€rkjĂ€rguline „kĂŒpsemine“, ulatuslik kogukond ja see, et ĂŒha rohkem ettevĂ”tteid omaks vĂ”tavad seda keelt pĂ€rast edukaid teste, sundis mind sellele tĂ€helepanu pöörama ja sĂŒvenema kirjandusse. Aga see postitus ei ole sellest, kumb on parem — Python vĂ”i Go: vĂ”rdlusi on internetis tohutult. Minu arvates sĂ”ltub kĂ”ik rakenduse valdkonnast. Kavatsema rÀÀkida, miks valisin Go, andes mĂ”ned nĂ€punĂ€ited ja lingid kasulikele ressurssidele kĂ”igile, keda see teema huvitab.

Skillbox soovitab: Praktiline kursus Python-arendaja alguses.

Tuletame meelde: kĂ”igile «Habr» lugejatele – 10 000 rubla allahindlus igale Skillboxi kursusele, kasutades sooduskoodi «Habr».

Minu tee Pythonist Go peale — jagan nĂ€punĂ€iteid ja ressursse

MÔtted

Esimene asi, mida ma oma teed alustades tegin, oli Ă”ppida suurepĂ€rane ametlik juhend “Tour Of Go”. See annab arusaama keele sĂŒntaksist.

Oma teadmiste tĂ€iustamiseks lugesin ka raamatut “Go for Python Programmers”, mis vĂ”imaldas mul liikuda jĂ€rgmisele etapile — katsetama ja eksima.

VÔtsin harjumuspÀrased funktsioonid, mida kasutasin Pythonis (JSON-i serialiseerimine vÔi HTTP-kutsed) ja proovisin neid Go-s kirjutada. Sellise visuaalse vÔrdluse abil Ônnestus mul tuvastada keelte vahelisi olulisi erinevusi.

Projekti seadistamine

Esiteks, Pythonil ei ole spetsiifilist kataloogide hierarhiat, samas kui Go-l on.

Go kasutab «standardsĂŒhendust», mis on veidi keerulisem ja vajab rohkem tööd. Teisest kĂŒljest saame hĂ€sti struktureeritud koodi aluse, kus kasutatakse modulaars struktuuri ja projekti laiendamisel jÀÀb kood rangelt korrastatud.

Ametlik juhend “How to Write Go Code” selgitab, kuidas oma tööd korraldada.

Statiline range tĂŒpiseerimine

Go on staatiliselt tĂŒpiseeritud ja see paneb end ebamugavalt tundma neid, kes on harjunud dĂŒnaamiliselt tĂŒpiseeritud keeltes, nagu Python ja Ruby.

Pole kahtlemata, et dĂŒnaamilised keeled on rohkem vigu tekitavad, arendajalt on nĂ”utud rohkem pingutusi sisendi kontrollimisel. NĂ€ide — funktsioon, mis arvutab kahe tĂ€isarvu summa. Kui funktsiooni edastatakse string (mida juhtub mitte nii harva), toob see kaasa TypeErrori vea.

Go keeles seda juhtuda ei saa, kuna igale muutuja ja funktsiooni tĂŒĂŒbile tuleb mÀÀrata tĂŒĂŒp ja see, millise tĂŒĂŒbi muutuja funktsioon tagastab.

Alguses on see hĂ€iriv: mulle tundus, et see Go eripĂ€ra aeglustab tööd, — kuid siis tuli arusaam, et tegelikult kĂ”ikide kuulutamine sÀÀstab aega ja vea tekkimise tĂ”enĂ€osus vĂ€heneb.

Natiivne paralleelsus

Go’l on natiivne tugi paralleelsusele kasutades gorutiine ja kanaleid — see on mugav.

Kanalite kontseptsioon tundub esialgu mÔnevÔrra keeruline. Kuid aja jooksul muutub see arusaadavamaks ja hakkate nautima uusi vÔimalusi, töötades aktiivselt nendega.

Siin on visuaalne esitamine kÔigest, mida öeldi Ivan Danilyukilt.

package main
 
func main() {
    // loo uus kanali tĂŒĂŒbiga int
    ch := make(chan int)
 
// kĂ€ivita uus anonĂŒĂŒmne gorutiin
    go func() {
        // saada 42 kanalisse
        ch <- 42
    }()
    // loe kanalist
    <-ch
}

Minu tee Pythonist Go peale — jagan nĂ€punĂ€iteid ja ressursse

Rohkem nÀiteid siin ja siin.

Töötamine JSON-iga

Noh, json.loads() enam ei eksisteeri. Pythonis on kÔik lihtne: kasutame json.loads ja probleeme pole.

Aga Go’s, staatiliselt tĂŒĂŒbitud keeles, on see operatsioon keerulisem.

Siin, kui kasutatakse JSON-i, on kĂ”ik eelnevalt mÀÀratletud. Iga vĂ€li, mis ei vasta mÀÀratletud struktuurile, jÀÀtakse tĂ€helepanuta, ja see on hea. Sellest vĂ”ib mĂ”elda kui eelnevalt kokku lepitud protokollist kahe poole vahel. Andmed, mille olete saanud JSON-is, peaksid olema ootuspĂ€rased ning JSON-i vĂ€ljad ja tĂŒĂŒbid on „kokkulepitud“ mĂ”lema poole poolt.

{
  “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"`
}

Muidugi saate JSON-i deserialiseerida ilma struktuurideta, kuid seda tuleks vÀltida, kui vÔimalik, ja arvestada keele staatilist loodust.

JSON-i dekodeerimist Go-s on kÔige parem selgitada selles postituses vÔi siin.

Kas olete liiga laisk, et muuta oma JSON Go-struktuuriks? Pole probleemi, see tööriist teeb kÔik teie eest.

Puhas kood

Go kompilator pĂŒĂŒab alati teie koodi "puhtana" hoida. Ta peab kasutamata muutujaid kompileerimisveaks. Go kasutab ainulaadset lĂ€henemist, mis vĂ”imaldab sĂŒsteemil enamikke vormindamisprobleeme lahendada. Nii kĂ€ivitab Go programmi gofmt salvestamisel vĂ”i kompileerimisel ning parandab vorminduse iseseisvalt.

Te ei hooli muutujatest? Pole probleem! Kasutage lihtsalt _ (allajoon) ja mÀÀrake see tĂŒhjale tuvastajale.

Keelega töötamise selle osa parim Ă”petlik allikas on teave raamatust “Effective Go”.

Sobiva teegi ja raamistikku leidmine

Olen kasutanud Pythonis raamistikke ja teeke nagu Flask, Jinja2, Requests ja isegi Kazoo, seega kartsin, et ei leia Go-le sobivat.

Aga kogukond on need probleemid juba lahendanud: keelel on oma ainulaadsed teegid, mis vÔimaldavad tÀielikult unustada, mida te varem kasutasite.

Siin on minu lemmikud.

Python Requests => net/http

net/http pakub mugavat ja lihtsat rakendust HTTP kliendile ja serverile.

Flask + Jinja2 => Gin

Gin on HTTP veebiraamistik, millel on vĂ€ga lihtne API: parameetrid teel, ĂŒleslaetavad failid, rĂŒhmarouteerimine (/api/v1, /api/v2), kohandatud logivormingud, staatiliste failide serveerimine, HTML-i renderdamine ja tĂ”eliselt vĂ”imekas kohandatud middleware.
Hinnake see tulemusi.

CLI loomine => Cobra

Cobra on teek vÔimsate CLI rakenduste loomiseks, samuti rakenduste ja kÀsufailide genereerimise programm.
Cobra on kasutusel paljudes suurtel Go projektides, sealhulgas Kubernetes, etcd ja OpenShift.

Siin on veel mĂ”ned teegid, mida ma siiralt soovitan: Viper, Gonfig ja see hĂ€mmastav nimekiri — Awesome-Go.

Teised kasulikud ressursid

[1] Francesc Campoy te peaksite kindlasti hindama neid YouTube'i kanalile ja GitHubi profiil.

[2] GopherCon — videod.

[3] Go Web nÀidised.

[4] Golang Weekly, Gopher Academy, Golang News — Twitteri kontod.

Teeme kokkuvÔtte

Olles viie aasta jooksul pidev Python kasutaja, kartsin, et ĂŒleminek Go-le on valus.

Aga mitte: Go kogukonna loodud töötavad vĂ€ljundid laiendavad ja tĂ€iendavad keele vĂ”imalusi ning erinevad kasulikud ressursid, mis aitavad teil ĂŒleminekut.

Go areneb kiiresti ja loodan, et Google suudab sellest teha peamise keele pilve rakenduste ja infrastruktuuri kirjutamiseks.

Liituge!

Minu tee Pythonist Go peale — jagan nĂ€punĂ€iteid ja ressursse

Skillbox soovitab:

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster