Mana ceļš no Python uz Go — dalos ar padomiem un resursiem

Mana ceļš no Python uz Go — dalos ar padomiem un resursiem

No tulkotāja: ir pārvietotas jums rakstu Ilada Leeva par pāreju no Python uz Go. 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 Python izstrādātājs no nulles.

Atgādinām: visiem «Habr» lasītājiem — atlaide 10 000 rubļu reģistrējoties jebkurā Skillbox kursā ar promo kodu «Habr».

Mana ceļš no Python uz Go — dalos ar padomiem un resursiem

Novērojumi

Pirmais, ko es izdarīju manu ceļojuma sākumā, — izpētīju lielisko oficiālo tutorialu “Tour Of Go”. Tas sniedz izpratni par valodas sintaksi.

Lai uzlabotu savas zināšanas, es izlasīju arī grāmatu “Go for Python Programmers”, 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 “How to Write Go Code” 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 Ivana Daniljuka.

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
}

Mana ceļš no Python uz Go — dalos ar padomiem un resursiem

Vairāk piemēru šeit un šeit.

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ā izskaidrota šajā ierakstā vai šeit.

Slinkojat konvertēt savu JSON uz Go struktūru? Nav problēmu, šis rīks visu izdarīs jūsu vietā.

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 “Effective Go”.

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

net/http nodrošina ērtu un viegli lietojamu HTTP klienta un servera īstenojumu.

Flask + Jinja2 => Gin

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 šis veiktspējas pārbaudi.

CLI izveide => Cobra

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: Viper, Gonfig un šis pārsteidzošais saraksts — Awesome-Go.

Citi noderīgi resursi

[1] Francesc Campoy  —  noteikti jums jānovērtē šie YouTube kanāls un GitHub profils.

[2] GopherCon — videoklipi.

[3] Go tīmekļa piemēri.

[4] Golang Weekly, Gopher Academy, Golang News — 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!

Mana ceļš no Python uz Go — dalos ar padomiem un resursiem

Skillbox iesaka:

Avots: habr.com

Iegādājieties uzticamu tīmekļa hostingu ar DDoS aizsardzību, VPS VDS serveriem 🔥 Iegādājieties uzticamu tīmekļa hostingu ar DDoS aizsardzību, VPS VDS serveriem | ProHoster