
Dall'autore: sono state trasferite . L'articolo sarà utile non solo ai programmatori principianti, ma anche a tutti coloro che comunque sono interessati a Go.
Mi piace Python. Questo linguaggio è stato il mio preferito negli ultimi cinque anni. È amichevole, efficace e facile da imparare. Viene utilizzato praticamente per tutto: dalla creazione di semplici script e dello sviluppo web, alla visualizzazione dei dati e all'apprendimento automatico
La 'maturazione' graduale di Go, la vasta comunità e il fatto che sempre più aziende adottano questo linguaggio dopo test di successo mi hanno spinto a prestare attenzione e approfondire la letteratura. Ma questo post non riguarda quale sia meglio - Python o Go: ci sono enormi quantità di confronti in rete. A mio parere, tutto dipende dall'ambito di applicazione. Intendo raccontare perché ho scelto Go, offrendo alcuni consigli e link a risorse utili per tutti coloro che sono interessati all'argomento.
Skillbox consiglia: Corso pratico .
Ricordiamo: per tutti i lettori di «Habr» — sconto di 10.000 rubli per l'iscrizione a qualsiasi corso Skillbox con il codice promozionale «Habr».

Osservazioni
La prima cosa che ho fatto all'inizio del mio percorso è stata studiare l'ottimo tutorial ufficiale “”. Esso offre una comprensione della sintassi del linguaggio.
Per migliorare le mie conoscenze, ho anche letto il libro “”, che mi ha permesso di passare alla fase successiva - prove ed errori.
Ho preso funzioni familiari che utilizzavo in Python (serializzazione JSON o gestione di chiamate HTTP) e ho provato a scriverle in Go. Grazie a questo confronto visivo, sono riuscito a evidenziare le differenze chiave tra i linguaggi.
Struttura del progetto
Innanzitutto, Python non richiede una gerarchia di directory specifica, mentre Go sì.
Go utilizza una 'struttura standard' che è un po' più complessa e richiede più lavoro. D'altra parte, il risultato è una base di codice ben strutturata, dove viene utilizzata una struttura modulare, e quando il progetto si espande, il codice rimane ben ordinato.
Il tutorial ufficiale “” spiega come organizzare il proprio lavoro.
Tipizzazione statica rigorosa
Go è staticamente tipizzato, e questo farà sentire a disagio chi è abituato a linguaggi dinamicamente tipizzati come Python e Ruby.
Non ci sono dubbi che i linguaggi dinamici siano più suscettibili a errori, da parte dello sviluppatore ci vuole più sforzo per verificare i dati di input. Ad esempio, una funzione che calcola la somma di due numeri interi. Se si passa una stringa alla funzione (cosa che accade non così raramente), si avrà un errore TypeError.
In Go questo non può accadere, poiché qui è necessario dichiarare il tipo per ogni variabile e funzione e quale tipo di variabile la funzione restituirà.
Inizialmente questo può risultare fastidioso: pensavo che questa caratteristica di Go rallentasse il lavoro, ma poi è arrivata la comprensione che, in realtà, dichiarare tutto fa risparmiare tempo e riduce la probabilità di errori.
Parallelismo nativo
Go ha un supporto nativo per il parallelismo utilizzando goroutine e canali - il che è molto utile.
Il concetto di canali può sembrare un po' confuso all'inizio. Tuttavia, col passare del tempo, diventa più chiaro e si inizia a godere delle nuove possibilità lavorando attivamente con essi.
Ecco una visualizzazione di quanto detto da .
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
} 
Altri esempi e .
Lavorare con JSON
Beh, json.loads() non esiste più. In Python è semplice: usiamo json.loads e non ci sono problemi.
Ma in Go, un linguaggio staticamente tipizzato, quest'operazione diventa più complessa.
Qui, nell'uso di JSON, tutto è predefinito. Qualsiasi campo che non si adatta alla struttura definita verrà ignorato, e questo è positivo. Si può pensare a questo come a un protocollo pre-accordato tra due parti. I dati che si ottengono in JSON devono essere attesi, e i campi e i tipi JSON sono 'accordati' 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"`
}Certo, puoi deserializzare JSON senza strutture, ma per quanto possibile, sarebbe da evitare e tenere conto della natura statica del linguaggio.
La decodifica di JSON in GO è meglio o .
Sei pigro nel convertire il tuo JSON in struttura Go? Nessun problema, .
Codice pulito
Il compilatore Go cercherà sempre di mantenere il tuo codice 'pulito'. Considera le variabili inutilizzate un errore di compilazione. Go utilizza un approccio unico, consentendo al sistema di risolvere la maggior parte dei problemi di formattazione. Così, Go eseguirà il programma gofmt durante il salvataggio o la compilazione e correggerà automaticamente la formattazione.
Non ti interessano le variabili? Va bene! Usa semplicemente _ (underscore) e assegnalo a un identificatore vuoto.
Un tutorial imperdibile per questa parte del lavoro con il linguaggio è l'informazione da ““.
Cercare una libreria e framework adatti
Ho utilizzato con Python framework e librerie come Flask, Jinja2, Requests e persino Kazoo, quindi temevo di non trovare nulla di adatto per Go.
Ma la community ha già risolto questi problemi: il linguaggio ha le proprie librerie uniche che permettono di dimenticare completamente ciò che si usava in precedenza.
Ecco i miei preferiti.
Python Requests => net/http
fornisce un'implementazione della client e server HTTP facile da usare e conveniente.
Flask + Jinja2 => Gin
è un framework web HTTP con un'API molto semplice: parametri nel percorso, file caricabili, routing di gruppi (/api/v1, /api/v2), formati di log personalizzati, servizio di file statici, rendering di HTML e un middleware personalizzato veramente potente.
Valuta il benchmark.
Creazione CLI => Cobra
è una libreria per creare potenti applicazioni CLI, così come un programma per generare applicazioni e file di comando.
Cobra è utilizzata in molti grandi progetti Go, inclusi Kubernetes, etcd e OpenShift.
Ecco altre librerie che ti consiglio vivamente: , e questa fantastica lista — .
Altre risorse utili
[1] — devi assolutamente dare un'occhiata a questi e .
[2] .
[3] .
[4] , , — account Twitter.
Tiriamo le somme
Essendo un utente abituale di Python per cinque anni, temevo che passare a Go sarebbe stato doloroso.
Ma no: ci sono risorse della community di Go che ampliano e completano le capacità del linguaggio, così come vari utili strumenti che ti aiuteranno nella transizione.
Go si sta sviluppando rapidamente e spero che Google possa farne il linguaggio principale per la scrittura di applicazioni e infrastrutture cloud.
Unisciti a noi!

Skillbox consiglia:
- Corso pratico di due anni .
- Corso online educativo .
- Corso pratico annuale .
Fonte: habr.com
