
Del traductor: traduït . 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 .
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".

Observacions
El primer que vaig fer al principi del meu viatge va ser estudiar l'excel·lent tutorial oficial "" Dóna una comprensió de la sintaxi de la llengua.
Per tal de millorar els meus coneixements, també vaig llegir el llibre "”, 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 "” 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 .
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
} 
Més exemples и .
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 o .
Massa mandrós per convertir el vostre JSON en una estructura Go? Cap problema, .
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 "".
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
proporciona una implementació de servidor i client HTTP còmoda i fàcil d'utilitzar.
Flask + Jinja2 => Ginebra
- 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 referent.
Creació CLI => 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: , i aquesta increïble llista - .
Altres recursos útils
[1] - Definitivament cal avaluar-los и .
[2] . [3] . [4] , , - 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

Skillbox recomana:
- Curs pràctic de dos anys .
- Curs educatiu en línia .
- Curs pràctic de l'any .
Font: www.habr.com
