Il mio viaggio da Python a Go: condivisione di suggerimenti e risorse

Il mio viaggio da Python a Go: condivisione di suggerimenti e risorse

Dal traduttore: tradotto per voi l'articolo di Ilad Leev sulla transizione da Python a Go. L'articolo sarà utile non solo per i programmatori alle prime armi, ma anche per tutti coloro che sono interessati a Go in un modo o nell'altro.

Mi piace Python. Questa lingua è stata la mia preferita negli ultimi cinque anni. È amichevole, efficiente e facile da imparare. Utilizzato per quasi tutto, dal semplice scripting e sviluppo web alla visualizzazione dei dati e all'apprendimento automatico

La graduale maturazione di Go, la vasta comunità e il fatto che sempre più aziende stiano adottando questo linguaggio dopo test di successo mi hanno fatto prestare attenzione e approfondire la letteratura. Ma questo post non riguarda quale sia il migliore: Python o Go.: ci sono un numero enorme di confronti sulla rete. Secondo me, tutto dipende dall'applicazione. Parlerò del motivo per cui ho scelto Go, dando alcuni suggerimenti e link a risorse utili per chiunque sia interessato all'argomento.

Skillbox consiglia: Corso pratico Sviluppatore Python da zero.

Ti ricordiamo: per tutti i lettori di "Habr" - uno sconto di 10 rubli al momento dell'iscrizione a qualsiasi corso Skillbox utilizzando il codice promozionale "Habr".

Il mio viaggio da Python a Go: condivisione di suggerimenti e risorse

osservazioni

La prima cosa che ho fatto all’inizio del mio percorso è stata studiare l’ottimo tutorial ufficiale”Giro di andare". Dà una comprensione della sintassi della lingua.

Per approfondire le mie conoscenze ho letto anche il libro “Vai per i programmatori Python”, che ci ha permesso di passare alla fase successiva: tentativi ed errori.

Ho preso funzioni familiari che ho usato in Python (serializzazione JSON o lavoro con chiamate HTTP) e ho provato a scriverle in Go. Grazie a questo confronto visivo, sono stato in grado di identificare le principali differenze tra le lingue.

Schema del progetto

Prima di tutto, Python non richiede una specifica gerarchia di directory, mentre Go sì.

Go usa un layout "standard", che è un po' più complesso e richiede più lavoro. D'altra parte, il risultato è una base di codice ben strutturata che utilizza una struttura modulare e, quando il progetto si espande, il codice rimane rigorosamente ordinato.

Tutorial ufficiale “Come scrivere il codice Gospiega come organizzare il tuo lavoro.

Digitazione forte statica

Go è tipizzato staticamente, e questo farà sentire fuori posto chi è abituato a linguaggi tipizzati dinamicamente come Python e Ruby.

Non c'è dubbio che i linguaggi dinamici siano più soggetti a errori, è necessario uno sforzo maggiore da parte dello sviluppatore durante la convalida dei dati di input. Un esempio è una funzione che calcola la somma di due numeri interi. Il passaggio di una stringa a una funzione (che non è raro) si tradurrà in un TypeError.

Questo non può accadere in Go, perché qui devi dichiarare un tipo per ogni variabile e funzione, e quale tipo di variabile restituirà la funzione.

All'inizio, questo era fastidioso, pensavo che questa caratteristica di Go rallentasse le cose, ma poi mi sono reso conto che dichiarare tutto fa risparmiare tempo e riduce la possibilità di errori.

Concorrenza nativa

Go ha il supporto nativo per la concorrenza utilizzando subroutine e pipe, il che è utile.

Il concetto di canali sembra inizialmente un po' confuso. Tuttavia, nel tempo, diventa più comprensibile e inizi a godere di nuove opportunità, lavorando attivamente con esse.

Ecco una visualizzazione di tutto ciò che è stato detto da 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
}

Il mio viaggio da Python a Go: condivisione di suggerimenti e risorse

Altri esempi qui и qui.

Utilizzo di JSON

Bene, json.loads() non c'è più. In Python, tutto è semplice: usiamo json.loads e non ci sono problemi.

Ma in Go, un linguaggio tipizzato staticamente, questa operazione diventa più difficile.

Qui, quando si utilizza JSON, tutto è predefinito. Qualsiasi campo che non rientra nella struttura data verrà ignorato, il che va bene. Questo può essere pensato come un protocollo prestabilito tra le due parti. I dati che hai ricevuto in JSON dovrebbero essere quelli che ti aspetti e i campi e i tipi di JSON sono "concordati" da entrambe le parti.

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

Naturalmente, puoi deserializzare JSON senza struct, ma questo dovrebbe essere evitato quando possibile e dovrebbe tenere conto della natura statica del linguaggio.

La decodifica JSON su GO è la migliore spiegato in questo post o qui.

Troppo pigro per convertire il tuo JSON in una struttura Go? Nessun problema, questo strumento farà tutto per te.

Codice pulito

Il compilatore Go cercherà sempre di mantenere pulito il tuo codice. Tratta le variabili inutilizzate come un errore di compilazione. Go ha un approccio unico che consente al sistema di risolvere la maggior parte dei problemi di formattazione. Ad esempio, Go eseguirà il programma gofmt durante il salvataggio o la compilazione e correggerà la formattazione da solo.

Ti interessano le variabili? OK! Basta usare _ (trattino basso) e assegnarlo a un id vuoto.

Il tutorial di Mastrid per questa parte del lavoro con la lingua è l'informazione da "Efficace Go".

Trovare la libreria e i framework giusti

Ho usato framework e librerie come Flask, Jinja2, Requests e persino Kazoo con Python, quindi temevo di non trovare nulla di adatto a Go.

Ma la comunità ha già risolto questi problemi: la lingua ha le sue librerie uniche che ti permettono di dimenticare completamente ciò che usavi prima.

Ecco i miei preferiti.

Richieste Python => net/http

rete/http fornisce un'implementazione client e server HTTP comoda e facile da usare.

Pallone + Jinja2 => Gin

Gin è un framework web HTTP con un'API molto semplice: parametri nel percorso, file da caricare, routing di gruppo (/api/v1, /api/v2), formati di log personalizzati che servono file statici, rendering HTML e middleware personalizzato davvero potente.
Vota questo questo segno di riferimento.

Creazione CLI => Cobra

cobra - una libreria per la creazione di potenti applicazioni CLI, nonché un programma per la generazione di applicazioni e file batch.
Cobra è utilizzato da molti grandi progetti Go, inclusi Kubernetes, etcd e OpenShift.

Ecco alcune altre librerie che consiglio vivamente: Viper™, Gonfig e questo fantastico elenco - Fantastico Vai.

Altre risorse utili

[1] Francesco Campo  - devi assolutamente valutarli Canale YouTube и Profilo GitHub.

[2] GopherCon - video. [3] Vai Esempi Web. [4] golang settimanale, Accademia Gopher, notizie Golang - Account Twitter.

Riassumendo

Essendo un normale utente Python da cinque anni, temevo che il passaggio a Go sarebbe stato doloroso.

Ma no: ci sono sviluppi dalla comunità Go, che estende e completa le capacità della lingua, oltre a varie risorse utili che ti aiuteranno nella transizione.

Go sta crescendo rapidamente e spero che Google possa renderlo il linguaggio di riferimento per la scrittura di applicazioni e infrastrutture cloud.

Unisciti ora!

Il mio viaggio da Python a Go: condivisione di suggerimenti e risorse

Skillbox consiglia:

Fonte: habr.com

Aggiungi un commento