El meu viatge de Python a Go: compartint consells i recursos

El meu viatge de Python a Go: compartint consells i recursos

Del traductor: traduït Per a tu, l'article d'Ilad Leev sobre la transició de Python a Go. L'article serà útil no només per als programadors novells, sinó també per a tots els que d'alguna manera estiguin interessats en Go.

M'agrada Python. Aquest idioma ha estat el meu preferit durant els últims cinc anys. És amable, eficient i fàcil d'aprendre. S'utilitza per a gairebé tot: des de simples scripts i desenvolupament web fins a la visualització de dades i l'aprenentatge automàtic

La progressiva “maduració” de Go, l'extensa comunitat i el fet que cada cop més empreses adopten aquest llenguatge després de proves reeixides m'han obligat a parar-hi atenció i a endinsar-me en la literatura. Però aquesta publicació no tracta sobre què és millor: Python o Go: Hi ha un gran nombre de comparacions a Internet. Al meu entendre, tot depèn de l'aplicació. Parlaré de per què vaig triar Go, donant alguns consells i enllaços a recursos útils per a qualsevol persona interessada en el tema.

Skillbox recomana: Curs pràctic Desenvolupador Python des de zero.

Recordem: per a tots els lectors de "Habr": un descompte de 10 rubles en inscriure's a qualsevol curs de Skillbox amb el codi promocional "Habr".

El meu viatge de Python a Go: compartint consells i recursos

Observacions

El primer que vaig fer al principi del meu viatge va ser estudiar l'excel·lent tutorial oficial "Tour de Go" Dóna una comprensió de la sintaxi de la llengua.

Per tal de millorar els meus coneixements, també vaig llegir el llibre "Aneu a programadors Python”, que ens va permetre passar a la següent etapa: assaig i error.

Vaig agafar les funcions conegudes que feia servir a Python (serialització JSON o gestió de trucades HTTP) i vaig provar d'escriure-les a Go. Gràcies a aquesta clara comparació, vaig poder identificar les diferències clau entre les llengües.

Maquetació del projecte

En primer lloc, Python no requereix una jerarquia de directoris específica, mentre que Go sí.

Go utilitza el disseny "estàndard", que és una mica més complex i requereix més treball. D'altra banda, el resultat és una base de codi ben estructurada que utilitza una estructura modular, i el codi es manté estrictament organitzat a mesura que el projecte s'amplia.

Tutorial oficial "Com escriure el codi Go” explica com organitzar el teu treball.

Mecanografia forta estàtica

Go s'escriu de manera estàtica, cosa que farà que aquells acostumats a llenguatges escrits dinàmicament com Python i Ruby se sentin incòmodes.

No hi ha dubte que els llenguatges dinàmics són més propensos a errors i requereixen més esforç per part del desenvolupador per validar les dades d'entrada. Un exemple és una funció que calcula la suma de dos nombres enters. Si passeu una cadena a una funció (cosa que no és tan rara), es produirà un TypeError.

Això no pot passar a Go perquè heu de declarar un tipus per a cada variable i funció i quin tipus de variable retornarà la funció.

Al principi va ser molest, vaig pensar que aquesta funció de Go alentiva les coses, però després em vaig adonar que declarar-ho tot estalviava temps i reduïa la probabilitat d'errors.

Concurrència nativa

Go té suport de concurrència nativa mitjançant subrutines i canonades, cosa que és convenient.

El concepte de canals sembla una mica confús al principi. Tanmateix, amb el temps, es fa més clar i comenceu a gaudir de noves oportunitats i a treballar-hi activament.

Aquí teniu una visualització de tot el que es diu Ivan Danilyuk.

package main
 
func main() {
    // create new channel of type int
    ch := make(chan int)
 
// start new anonymous goroutine
    go func() {
        // send 42 to channel
        ch <- 42
    }()
    // read from channel
    <-ch
}

El meu viatge de Python a Go: compartint consells i recursos

Més exemples aquí и aquí.

Treballant amb JSON

Bé, json.loads() ja no existeix. A Python tot és senzill: fem servir json.loads, i no hi ha problemes.

Però a Go, un llenguatge escrit estàticament, aquesta operació es fa més complexa.

Aquí, quan s'utilitza JSON, tot està predefinit. Qualsevol camp que no encaixi en l'estructura donada serà ignorat, que és bo. Podeu pensar-ho com un protocol preacordat entre dues parts. Les dades que rebeu en JSON haurien de ser les que espereu i els camps i els tipus JSON haurien de ser "acordats" per ambdues parts.

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

Per descomptat, podeu deserialitzar JSON sense estructures, però això s'ha d'evitar si és possible i s'ha de tenir en compte la naturalesa estàtica del llenguatge.

Descodificar JSON on GO és millor explicat en aquest post o aquí.

Massa mandrós per convertir el vostre JSON en una estructura Go? Cap problema, aquesta eina ho farà tot per tu.

Codi net

El compilador Go sempre intentarà mantenir el vostre codi net. Considera que les variables no utilitzades són un error de compilació. Go utilitza un enfocament únic que permet al sistema resoldre la majoria dels problemes de format. Per tant, Go executarà el programa gofmt quan desi o compile i corregirà el format.

No t'importen les variables? D'ACORD! Només cal que utilitzeu _ (guió baix) i assigneu-lo a un identificador buit.

El tutorial de Mastrid per a aquesta part del treball amb l'idioma és informació de "Go efectiu".

Trobar la biblioteca i els marcs adequats

He utilitzat marcs i biblioteques com Flask, Jinja2, Requests i fins i tot Kazoo amb Python, així que tenia por que no trobaria res adequat per a Go.

Però la comunitat ja ha resolt aquests problemes: l'idioma té les seves pròpies biblioteques úniques que us permeten oblidar completament el que heu utilitzat abans.

Aquí teniu els meus preferits.

Sol·licituds Python => net/http

net/http proporciona una implementació de servidor i client HTTP còmoda i fàcil d'utilitzar.

Flask + Jinja2 => Ginebra

Gin - Marc web HTTP amb una API molt senzilla: paràmetres de ruta, fitxers descarregables, encaminament de grups (/api/v1, /api/v2), formats de registre personalitzats que serveixen fitxers estàtics, renderització HTML i programari intermediari personalitzat molt potent.
Taxa aquest referent.

Creació CLI => Cobra

Cobra — una biblioteca per crear aplicacions CLI potents, així com un programa per generar aplicacions i fitxers per lots.
Cobra s'utilitza en molts grans projectes Go, inclosos Kubernetes, etcd i OpenShift.

Aquí hi ha algunes biblioteques més que recomano molt: escurçó, Gonfig i aquesta increïble llista - Genial-Va.

Altres recursos útils

[1] Francesc Campoy  - Definitivament cal avaluar-los Canal de YouTube и Perfil de GitHub.

[2] GopherCon - vídeo. [3] Go Web Exemples. [4] Golang Weekly, Acadèmia Gopher, Golang News - Comptes de Twitter.

En resum

Havent estat un usuari habitual de Python durant cinc anys, tenia por que canviar a Go seria dolorós.

Però no: hi ha feina de la comunitat Go que amplia i complementa les capacitats de l'idioma, així com diversos recursos útils que us ajudaran amb la transició.

Go està creixent ràpidament i espero que Google pugui convertir-lo en l'idioma principal per escriure aplicacions i infraestructures al núvol.

Uniu-vos ara

El meu viatge de Python a Go: compartint consells i recursos

Skillbox recomana:

Font: www.habr.com

Afegeix comentari