Moj put od Pythona do Go — dijelim savjete i resurse

Moj put od Pythona do Go — dijelim savjete i resurse

Od prevoditelja: preveli za vas članak Ilada Leeva o prijelazu s Pythona na Go. Članak će biti koristan ne samo početnicima programerima, već i svima koji su na bilo koji način zainteresirani za Go.

Sviđa mi se Python. Ovaj je jezik bio moj favorit posljednjih pet godina. Prijateljski je, učinkovit i lako ga je naučiti. Koristi se gotovo za sve: od stvaranja jednostavnih skripti i web razvoja do vizualizacije podataka i strojnog učenja.

Postepeno "zrenje" Go-a, opsežna zajednica i činjenica da sve više tvrtki usvaja ovaj jezik nakon uspješnih testova natjerali su me da obratim pažnju na njega i produbim literaturu. Ali ovaj post nije o tome što je bolje — Python ili Go: usporedbi na mreži ima u izobilju. Po mom mišljenju, sve ovisi o području primjene. Planiram ispričati zašto sam odabrao Go, dajući nekoliko savjeta i poveznica na korisne resurse za sve koje zanima ova tema.

Skillbox preporučuje: Praktični tečaj Python programer od nule.

Podsjećamo: za sve čitatelje "Habra" — popust od 10 000 rubalja prilikom upisa na bilo koji tečaj Skillbox uz promo kod "Habr".

Moj put od Pythona do Go — dijelim savjete i resurse

Zapažanja

Prvo što sam učinio na početku puta je da sam proučio odličan službeni vodič “Tour Of Go”. On pruža uvid u sintaksu jezika.

Kako bih poboljšao znanje, pročitao sam još i knjigu “Go for Python Programmers”, koja mi je omogućila prelazak na sljedeću fazu — pokušaje i pogreške.

Uzeo sam uobičajene funkcije koje sam koristio u Pythonu (serializacija JSON-a ili rad s HTTP pozivima) i pokušao ih napisati na Go. Zahvaljujući toj vizualnoj usporedbi, uspio sam uočiti ključne razlike između jezika.

Strukturiranje projekta

Prije svega, Python ne zahtijeva specifičnu hijerarhiju direktorija, dok Go — da.

Go koristi "standardno" strukturiranje, koje je malo složenije i zahtijeva više rada. S druge strane, kao rezultat dobivamo dobro strukturiranu osnovu koda, gdje se koristi modularna struktura, a pri širenju projekta kod ostaje strogo organiziran.

Službeni vodič “How to Write Go Code” objašnjava kako organizirati svoj rad.

Statička stroga tipizacija

Go je statički tipiziran, i to će natjerati one koji su navikli na dinamički tipizirane jezike poput Pythona i Rubyja da se osjećaju nelagodno.

Nema sumnje da su dinamički jezici podložniji greškama, a programer mora uložiti više truda u provjeru ulaznih podataka. Primjer — funkcija koja izračunava sumu dva cijela broja. Ako se u funkciju proslijedi niz (što se ne dešava tako rijetko), to će rezultirati greškom TypeError.

U Go-u se to ne može dogoditi, jer je potrebno deklarirati tip za svaku varijablu i funkciju i odrediti koji tip varijable funkcija vraća.

Isprva je to iritirajuće: činilo mi se da ova osobina Go-a usporava rad, — ali kasnije sam shvatio da zapravo deklariranje svega štedi vrijeme, a vjerojatnost greške se smanjuje.

Prirodni paralelizam

Go ima nativnu podršku za paralelizam koristeći goroutine i kanale — što je vrlo praktično.

Koncept kanala isprva izgleda pomalo zbunjujuće. Međutim, s vremenom postaje jasniji i počinjete uživati u novim mogućnostima dok aktivno radite s njima.

Evo vizualizacije svega rečenog od Ivana Daniljuka.

package main
 
func main() {
    // kreiraj novi kanal tipa int
    ch := make(chan int)
 
    // pokreni novu anonimnu goroutine
    go func() {
        // pošalji 42 u kanal
        ch <- 42
    }()
    // pročitaj iz kanala
    <-ch
}

Moj put od Pythona do Go — dijelim savjete i resurse

Više primjera ovdje i ovdje.

Rad s JSON-om

Pa, json.loads() više nema. U Pythonu je sve jednostavno: koristimo json.loads i nema problema.

Ali u Go-u, statički tipiziranom jeziku, ova operacija postaje složenija.

Ovdje, kada koristite JSON, sve je unaprijed definirano. Svako polje koje se ne uklapa u zadanu strukturu bit će ignorirano, i to je dobro. O tome se može razmišljati kao o unaprijed dogovorenom protokolu između dviju strana. Podaci koje ste primili u JSON-u trebali bi biti očekivani, a polja i tipovi JSON-a su 'dogovoreni' između obje strane.

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

Naravno, možete deserializirati JSON bez struktura, ali to treba izbjegavati kad god je to moguće i uzeti u obzir statičku prirodu jezika.

Dekodiranje JSON-a na GO-u najbolje je objašnjeno u ovoj objavi ili ovdje.

Lijenite se pretvoriti vaš JSON u Go strukturu? Nema problema, ovaj alat će sve učiniti umjesto vas.

Čist kod

Go kompajler uvijek nastoji održati vaš kod „čistim“. Smatra da su neiskorištene varijable greška pri kompajliranju. Go koristi jedinstven pristup omogućavajući sustavu da rješava većinu problema s formatiranjem. Tako će Go pokrenuti program gofmt prilikom spremanja ili kompajliranja i samostalno ispraviti formatiranje.

Ne zanima vas varijable? U redu! Samo koristite _ (donju crtu) i dodijelite je praznom identifikatoru.

Masthead tutorial za ovaj dio rada sa jezikom je informacija iz “Effective Go”.

Pronalaženje odgovarajuće biblioteke i okvira

Kao što sam koristio okvire i biblioteke poput Flask, Jinja2, Requests i čak Kazoo s Pythonom, bojao sam se da neću pronaći ništa odgovarajuće za Go.

No, zajednica je već riješila te probleme: jezik ima vlastite jedinstvene biblioteke koje omogućuju potpuno zaboravljanje na ono što ste koristili ranije.

Evo mojih favorita.

Python Requests => net/http

net/http nudi jednostavnu i lako upotrebljivu implementaciju HTTP klijenta i poslužitelja.

Flask + Jinja2 => Gin

Gin — HTTP web okvir s vrlo jednostavnim API-jem: parametrima u putanji, učitanim datotekama, grupnom usmjeravanju (/ api / v1, / api / v2), korisničkim formatima zapisivanja, posluživanjem statičkih datoteka, renderiranjem HTML-a i doista moćnim prilagođenim middleware-om.
Ocijenite ovaj benchmark.

Kreacija CLI-a => Cobra

Cobra — biblioteka za izradu moćnih CLI aplikacija, kao i program za generiranje aplikacija i naredbenih datoteka.
Cobra se koristi u mnogim velikim Go projektima, uključujući Kubernetes, etcd i OpenShift.

Evo još nekoliko biblioteka koje toplo preporučujem: Viper, Gonfig i ova nevjerojatna lista — Awesome-Go.

Drugi korisni resursi

[1] Francesc Campoy  —  definitivno trebate provjeriti ove YouTube kanal i GitHub profil.

[2] GopherCon — video.

[3] Go Web Primjeri.

[4] Golang Tjedno, Gopher Akademija, Golang Vijesti — Twitter računi.

Zaključujemo

Budući da sam pet godina bio stalni korisnik Pythona, bojao sam se da će prijelaz na Go biti bolan.

Ali nije: postoji mnogo resursa zajednice Go koje proširuju i nadopunjuju mogućnosti jezika, kao i razni korisni resursi koji će vam pomoći u prijelazu.

Go se brzo razvija, i nadam se da će Google učiniti to glavnim jezikom za pisanje aplikacija u oblaku i infrastrukturu.

Pridružite se!

Moj put od Pythona do Go — dijelim savjete i resurse

Skillbox preporučuje:

Izvor: habr.com

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster