Minu tee Pythonist Go'ni — jagan nĂ”uandeid ja ressursse

Minu tee Pythonist Go'ni — jagan nĂ”uandeid ja ressursse

TĂ”lkijalt: tĂ”lgitud teile Ilda Leevi artikkel Pythonilt Go-le ĂŒleminekust. Artikkel on kasulik mitte ainult algajatele programmeerijatele, vaid ka kĂ”igile, kes on Go'ga mingil viisil seotud.

Mulle meeldib Python. See keel on olnud minu lemmik viimased viis aastat. See on sÔbralik, efektiivne ja kergesti Ôpitav. Seda kasutatakse praktiliselt igasuguste asjade jaoks: alates lihtsatest skriptidest ja veebiarendusest kuni andmete visualiseerimise ja masinÔppeni.

Go jĂ€rkjĂ€rguline "kĂŒpsemine", ulatuslik kogukond ja tĂ”siasi, et jĂ€rjest rohkem ettevĂ”tteid omaks seda keelt pĂ€rast edukaid katseid, sundis mind sellele tĂ€helepanu pöörama ja sĂŒvenema kirjandusse. Aga see postitus ei ole selle kohta, kumb on parem — Python vĂ”i Go: vĂ”rreldav ĂŒldine teave on Internetis tohutult. Minu arvates sĂ”ltub kĂ”ik rakendusvaldkonnast. Kavatsema jagada teavet, miks valisin Go, andes mĂ”ned soovitused ja lingid kasulikele ressurssidele huvilistele.

Skillbox soovitab: Praktiline kursus Python-arendaja algusest peale.

Tuletame meelde: kĂ”igile «Habra» lugejatele — 10 000 rubla soodustus, kui registreerite end Skillboxi mis tahes kursusele promokoodi «Habr» abil.

Minu tee Pythonist Go'ni — jagan nĂ”uandeid ja ressursse

Vaated

Esimene asi, mida ma tegin oma teekonna alguses, oli suurepĂ€rase ametliku Ă”petuse „Tour Of Go“ uurimine. See annab arusaama keele sĂŒnteesi.

Oma teadmiste sĂŒvendamiseks lugesin ka raamatut “Go for Python Programmers”, mis viis jĂ€rgmise etapini — katsete ja vigadeni.

VÔtsin tavalised funktsioonid, mida kasutasin Pythonis (JSON-serialiseerimine vÔi HTTP-kÔned), ja proovisin need Go's kirjutada. Selline visuaalne vÔrdlus aitas mul vÀlja tuua peamised erinevused keelte vahel.

Projekti ĂŒlesehitus

Esiteks ei vaja Python spetsiifilist kataloogihierarhiat, kuid Go vajab seda.

Go kasutab "standardeid" ehitusmeetodit, mis on veidi keerulisem ja nĂ”uab rohkem tööd. Teisest kĂŒljest saame hĂ€sti struktureeritud koodibaasi, kus kasutatakse modulaarset struktuuri ning projekti laienedes jÀÀb kood rangelt korraldatuks.

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

Staatiline ranget tĂŒĂŒpi mÀÀramine

Go on staatiliselt tĂŒĂŒbistatud, ja see paneb tundma, et need, kes on harjunud dĂŒnaamiliselt tĂŒĂŒbistatud keeltes (nagu Python ja Ruby), ei tunne end mugavalt.

Ei ole kahtlust, et dĂŒnaamilised keeled on rohkem kalduvused vigadele, nĂ”udes arendajalt suuremat pingutust sisendandmete kontrollimisel. NĂ€iteks — funktsioon, mis arvutab kahe tĂ€isarvu summa. Kui funktsioonile edastada string (mis juhtub mitte nii harva), siis see toob kaasa TypeError'i.

Go's ei saa midagi sellist juhtuda, kuna igale muutujale ja funktsioonile tuleb mÀÀrata tĂŒĂŒp ja see, millist tĂŒĂŒpi muutuja funktsioon tagastab.

Alguses hĂ€iris see mind: mul tundus, et Go-s see omadus aeglustab tööd, — kuid siis jĂ”udsin arusaamisele, et tegelikult muudab kĂ”ikide deklareerimine aega sÀÀstvaks ja viga tekkimise tĂ”enĂ€osus vĂ€heneb.

Natiivne paralleelsus

Go'l on natiivne tugi paralleelsusele, kasutades gorutiiine ja kanaleid — see on mugav.

Kanalite kontseptsioon tundub alguses veidi segane. Kuid aja jooksul muutub see selgeks ja hakkate nautima uusi vÔimalusi aktiivselt nende kasutamisel.

Siin on visuaalne kokkuvÔte kÔigest, mida rÀÀkis Ivan Danilyuk.

package main
 
func main() {
    // loo uus kanal 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'ni — jagan nĂ”uandeid ja ressursse

Rohkem nÀiteid siit ja siit.

Töö JSON-iga

Noh, json.loads() enam ei ole. Pythoni puhul on kÔik lihtne: kasutame json.loads'i ja probleemid puuduvad.

Kuid Go-s, staatiliselt tĂŒĂŒbistatud keeles, muutub see toiming keerulisemaks.

Siin, kui kasutate JSON-i, on kĂ”ik eelnevalt mÀÀratletud. Iga vĂ€li, mis ei vasta mÀÀratud struktuurile, jĂ€etakse tĂ€helepanuta, ja see on hea. Seda saab pidada eelnevalt kokku lepitud protokolliks kahe poole vahel. Andmed, mida saate JSON-is, peaksid olema oodatud ja JSON-i vĂ€ljad ning tĂŒĂŒbid on „kokku lepitud“ mĂ”lema poolega.

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

Loomulikult saate JSON-i deserialiseerida ilma struktuurideta, kuid seda tuleks vÔimalusel vÀltida ning arvestada keele staatilist loomust.

JSON-i dekodeerimine GO-s on kÔige paremini selgitatud selles postituses vÔi siit.

Kas te laisklete oma JSON-i konverteerimisel Go-struktuuriks? Pole probleemi, see tööriist teeb kogu töö teie eest Àra.

Puhtad kood

Go kompilaator pĂŒĂŒab alati hoida teie koodi „puhtana“. Ta peab kasutamata muutujaid kompileerimise veaks. Go-s kasutatakse ainulaadset lĂ€henemist, mis vĂ”imaldab sĂŒsteemil lahendada enamik formaadi probleeme. Seega kĂ€ivitab Go programmi gofmt salvestamise vĂ”i kompileerimise ajal ja parandab formaadi automaatselt.

Te ei hooli muutujatest? Okei! Kasuta lihtsalt _ (alusjoont) ja mÀÀra see tĂŒhjale identifikaatorile.

Selle osa keele töö Ă”ppimiseks on info "Effective Go”.

Sobiva teegi ja raamistikute otsimine

Olen kasutanud Pythonis raamistikke ja teeke nagu Flask, Jinja2, Requests ja isegi Kazoo, seetÔttu kartsin, et ei leia Go jaoks sobivat midagi.

Aga kogukond on need mured juba lahendanud: keeles on unikaalsed teegid, mis vÔimaldavad tÀiesti unustada, mida varem kasutasite.

Siin on minu lemmikud.

Python Requests => net/http

net/http pakub mugavat ja kerge kasutada HTTP-klientide ja serverite teostust.

Flask + Jinja2 => Gin

Gin — HTTP veebiraamistik vĂ€ga lihtsa API-ga: parameetrite teed, failide ĂŒleslaadimine, grupi marsruutimine (/api/v1, /api/v2), kohandatud logiformaadid, staatiliste failide serveerimine, HTML-i renderdamine ja tĂ”eliselt vĂ”imekas kohandatud vahekiht.
Hinda seda benchmarki.

CLI loomine => Cobra

Cobra — teek vĂ”imsate CLI-rakenduste loomiseks, samuti rakenduste ja kĂ€sufailide genereerimise programm.
Cobra on kasutusel paljudes suurtes Go projektides, sealhulgas Kubernetes, etcd ja OpenShift.

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

Teised kasulikud ressursid

[1] Francesc Campoy  —  sa pead kindlasti hindama neid YouTube'i kanal ja GitHub-profiil.

[2] GopherCon — videod.

[3] Go Web Examples.

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

Teeme kokkuvÔtteid

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

Aga ei: on olemas Go kogukonna tootmised, mis laiendavad ja tĂ€iustavad keele vĂ”imalusi, samuti erinevad kasulikud ressursid, mis aitavad sul ĂŒleminekuga toime tulla.

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

Liituge!

Minu tee Pythonist Go'ni — jagan nĂ”uandeid ja ressursse

Skillbox soovitab:

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster