
No tulkotāja: ir pārvietotas . Raksts būs noderīgs ne tikai iesācējiem programmētājiem, bet arī visiem, kas kādā veidā interesējas par Go.
Man patīk Python. Šī valoda bija mana iecienītākā pēdējos piecus gadus. Tā ir draudzīga, efektīva un viegli apgūstama. To izmanto gandrīz visam: no vienkāršu skriptu un tīmekļa izstrādes līdz datu vizualizācijai un mašīnmācībai.
Pakāpeniskā Go "nobriešana", plašā kopiena un tas, ka aizvien vairāk uzņēmumu pieņem šo valodu savā darbībā pēc veiksmīgiem testi, lika man pievērst uzmanību un padziļināti iepazīties ar literatūru. Bet šis ieraksts nav par to, kas ir labāks — Python vai Go: salīdzinājumu tīklā ir milzīgi daudz. Manuprāt, viss ir atkarīgs no pielietojuma jomas. Es plānoju pastāstīt par to, kāpēc izvēlējos Go, sniedzot dažus padomus un saites uz noderīgiem resursiem visiem, kas interesējas par šo tēmu.
Skillbox iesaka: Praktiskais kurss .
Atgādinām: visiem «Habr» lasītājiem — atlaide 10 000 rubļu reģistrējoties jebkurā Skillbox kursā ar promo kodu «Habr».

Novērojumi
Pirmais, ko es izdarīju manu ceļojuma sākumā, — izpētīju lielisko oficiālo tutorialu “”. Tas sniedz izpratni par valodas sintaksi.
Lai uzlabotu savas zināšanas, es izlasīju arī grāmatu “”, kas ļāva pāriet uz nākamo posmu — mēģinājumiem un kļūdām.
Es paņēmu ierastās funkcijas, kuras izmantoju Python (JSON serializācija vai darbs ar HTTP izsaukumiem), un mēģināju uzrakstīt tās Go. Pateicoties šai vizuālajai salīdzināšanai, man izdevās noteikt galvenās atšķirības starp valodām.
Projekta struktūra
Pirmkārt, Python neprasa specifisku katalogu hierarhiju, kamēr Go — jā.
Go izmanto "standarta" struktūru, kas ir nedaudz sarežģītāka un prasa vairāk darba. No otras puses, rezultātā mēs iegūstam labi strukturētu kodu, kur tiek izmantota modulāra struktūra, un, paplašinot projektu, kods paliek stingri sakārtots.
Oficiālais tutorial “” izskaidro, kā organizēt savu darbu.
Statiskā stingrā tipizācija
Go ir statiski tipizēts, un tas liks justies nekomfortabli tiem, kas pieraduši pie dinamiski tipizētām valodām, piemēram, Python un Ruby.
Nav šaubu, ka dinamiskās valodas ir vairāk pakļautas kļūdām, un izstrādātājiem vajag vairāk pūļu, lai pārbaudītu ievades datus. Piemērs ir funkcija, kas aprēķina divu veselu skaitļu summu. Ja funkcijai nodod virkni (kas notiek ne pārāk reti), tas izraisīs TypeError kļūdu.
Go šāds gadījums nevar notikt, jo šeit ir jādeklāre katra mainīgā un funkcijas tips, kā arī tas, kāda tipa mainīgs funkcija atgriezīs.
Sākotnēji tas bija kaitinoši: man šķita, ka šī Go īpatnība palēnina darbu, — taču vēlāk sapratu, ka viss deklarēšanas process patiesībā ietaupa laiku un samazina kļūdu iespējamību.
Nativs paralēlisms
Go nodrošina nativu paralēlisma atbalstu, izmantojot apakšprogrammas un kanālus — tas ir ērti.
Kanālu koncepcija sākumā šķiet nedaudz mulsinoša. Tomēr laika gaitā tā kļūst saprotamāka, un jūs sākāt izbaudīt jaunas iespējas, aktīvi ar tām strādājot.
Šeit ir vizualizācija par visu iepriekš minēto no .
package main
func main() {
// izveidot jaunu kanālu ar tipa int
ch := make(chan int)
// uzsākt jaunu anonīmu goroutine
go func() {
// nosūtīt 42 uz kanālu
ch <- 42
}()
// lasīt no kanāla
<-ch
} 
Vairāk piemēru un .
Darbs ar JSON
Nu, json.loads() vairs nav nepieciešams. Python ir vienkārši: izmantojam json.loads, un nav problēmu.
Taču Go, statiski tipizētā valodā, šī operācija kļūst sarežģītāka.
Šeit, izmantojot JSON, viss ir iepriekš noteikts. Jebkura lauks, kas neiekļaujas noteiktajā struktūrā, tiks ignorēts, un tas ir labi. Par to var domāt kā par iepriekš saskaņotu protokolu starp divām pusēm. Dati, kurus saņēmāt JSON, jābūt gaidāmiem, un JSON lauki un tipi ir "saskaņoti" abām pusēm.
{
"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"`
}Protams, jūs varat deserializēt JSON bez struktūrām, bet, ja iespējams, to vajadzētu izvairīties un ņemt vērā valodas statisko dabu.
JSON dekodēšana GO ir vislabākā vai .
Slinkojat konvertēt savu JSON uz Go struktūru? Nav problēmu, .
Tīrs kods
Go kompilators vienmēr centīsies uzturēt jūsu kodu «tīru». Tas uzskata neizmantotas mainīgās par kompilācijas kļūdu. Go izmanto unikālu pieeju, kurā sistēma spēj atrisināt lielāko daļu formatēšanas problēmu. Tādējādi Go palaiž programmu gofmt, kad tiek saglabāts vai kompilēts, un pati koriģē formatējumu.
Jums nav rūp mainīgie? Labi! Vienkārši izmantojiet _ (zemsvītra) un piešķiriet to tukšam identifikatoram.
Šī darba ar valodu maštrabid-tutorijam ir informācija no “”.
Piemērotas bibliotēkas un ietvaru meklēšana
Es izmantoju Python ietvarus un bibliotēkas, piemēram, Flask, Jinja2, Requests un pat Kazoo, tāpēc baidījos, ka nevarēšu atrast neko piemērotu Go.
Bet kopiena jau ir atrisinājusi šīs problēmas: valodai ir savas unikālas bibliotēkas, kas ļauj pilnībā aizmirst par to, ko izmantojāt iepriekš.
Lūk, mani favorīti.
Python Requests => net/http
nodrošina ērtu un viegli lietojamu HTTP klienta un servera īstenojumu.
Flask + Jinja2 => Gin
— HTTP tīmekļa ietvars ar ļoti vienkāršu API: parametri ceļā, augšupielādējami faili, grupu maršrutēšana (/ api / v1, / api / v2), pielāgota žurnāla formāti, statisko failu apkalpošana, HTML renderēšana un patiešām jaudīgs pielāgojams middleware.
Novērtējiet veiktspējas pārbaudi.
CLI izveide => Cobra
— bibliotēka, lai izveidotu jaudīgas CLI lietojumprogrammas, kā arī programma lietojumprogrammu un komandu failu ģenerēšanai.
Cobra tiek izmantota daudzu lielo Go projektu, tostarp Kubernetes, etcd un OpenShift, izstrādē.
Lūk, vēl dažas bibliotēkas, kuras es ļoti iesaku: , un šis pārsteidzošais saraksts — .
Citi noderīgi resursi
[1] — noteikti jums jānovērtē šie un .
[2] .
[3] .
[4] , , — Twitter konti.
Noslēdzot
Būdams pastāvīgs Python lietotājs piecus gadus, es baidījos, ka pāreja uz Go būs sāpīga.
Bet nē: ir Go kopienas izstrādājumi, kas paplašina un papildina valodas iespējas, kā arī dažādi noderīgi resursi, kas palīdzēs jums pārejā.
Go ātri attīstās, un es ceru, ka Google spēs to padarīt par galveno valodu, lai rakstītu mākoņu lietojumprogrammas un infrastruktūru.
Pievienojieties!

Skillbox iesaka:
- Divu gadu praktiskais kurss .
- Izglītības tiešsaistes kurss .
- Praktiskais gada kurss .
Avots: habr.com
