
TÔlkijalt: moved . 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 .
Tuletame meelde: kĂ”igile «Habr» lugejatele â 10 000 rubla allahindlus igale Skillboxi kursusele, kasutades sooduskoodi «Habr».

MÔtted
Esimene asi, mida ma oma teed alustades tegin, oli Ă”ppida suurepĂ€rane ametlik juhend ââ. See annab arusaama keele sĂŒntaksist.
Oma teadmiste tĂ€iustamiseks lugesin ka raamatut ââ, 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 ââ 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 .
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
} 
Rohkem nÀiteid ja .
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 vÔi .
Kas olete liiga laisk, et muuta oma JSON Go-struktuuriks? Pole probleemi, .
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 ââ.
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
pakub mugavat ja lihtsat rakendust HTTP kliendile ja serverile.
Flask + Jinja2 => 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 tulemusi.
CLI loomine => 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: , ja see hĂ€mmastav nimekiri â .
Teised kasulikud ressursid
[1] te peaksite kindlasti hindama neid ja .
[2] .
[3] .
[4] , , â 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!

Skillbox soovitab:
- Kaks aastat praktilist kursust .
- Haridusalane veebikursus .
- Praktiline aastakursus .
Allikas: habr.com
