
TÔlkijalt: tÔlgitud . 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 .
Tuletame meelde: kĂ”igile «Habra» lugejatele â 10 000 rubla soodustus, kui registreerite end Skillboxi mis tahes kursusele promokoodi «Habr» abil.

Vaated
Esimene asi, mida ma tegin oma teekonna alguses, oli suurepĂ€rase ametliku Ă”petuse ââ uurimine. See annab arusaama keele sĂŒnteesi.
Oma teadmiste sĂŒvendamiseks lugesin ka raamatut ââ, 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 ââ 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 .
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
} 
Rohkem nÀiteid ja .
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 vÔi .
Kas te laisklete oma JSON-i konverteerimisel Go-struktuuriks? Pole probleemi, .
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 "â.
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
pakub mugavat ja kerge kasutada HTTP-klientide ja serverite teostust.
Flask + Jinja2 => 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 benchmarki.
CLI loomine => 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: , ja see hĂ€mmastav nimekiri â .
Teised kasulikud ressursid
[1] ââ âsa pead kindlasti hindama neid ja .
[2] .
[3] .
[4] , , â 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!

Skillbox soovitab:
- Kaheaastane praktiline kursus .
- Hariduslik veebikursus .
- Praktiline aastakursus .
Allikas: habr.com
