
Du traducteur : ont été . Cet article sera utile non seulement aux développeurs débutants, mais aussi à tous ceux qui s'intéressent d'une manière ou d'une autre à Go.
J'aime Python. Ce langage a été mon favori pendant les cinq dernières années. Il est convivial, efficace et facile à apprendre. Il est utilisé pratiquement pour tout : de la création de scripts simples et du développement web à la visualisation de données et à l'apprentissage automatique
La « maturation » progressive de Go, sa vaste communauté et le fait que de plus en plus d'entreprises adoptent ce langage après des tests réussis m'ont amené à y prêter attention et à approfondir mes lectures. Mais ce post n'est pas sur ce qui est mieux : Python ou Goil existe une multitude de comparaisons en ligne. À mon avis, tout dépend du domaine d'application. Je vais expliquer pourquoi j'ai choisi Go, en donnant quelques conseils et des liens vers des ressources utiles pour tous ceux qui s'intéressent au sujet.
Skillbox recommande : Cours pratique .
Rappelons-le : pour tous les lecteurs de « Habr » — une réduction de 10 000 roubles lors de l'inscription à tout cours Skillbox avec le code promo « Habr ».

Observations
La première chose que j'ai faite au début de mon parcours a été d'étudier le superbe tutoriel officiel “”. Cela me donne une compréhension de la syntaxe du langage.
Pour améliorer mes connaissances, j'ai également lu le livre “”, qui m'a permis de passer à l'étape suivante : essais et erreurs.
J'ai pris les fonctions familières que j'utilisais en Python (sérialisation JSON ou appel HTTP) et j'ai essayé de les écrire en Go. Grâce à cette comparaison visuelle, j'ai pu identifier les principales différences entre les langages.
Structure du projet
Tout d'abord, Python ne nécessite pas de hiérarchie de répertoires spécifique, alors que Go en requiert une.
Go utilise une structure « standard » qui est un peu plus complexe et nécessite plus de travail. D'un autre côté, cela nous donne une base de code bien structurée où une structure modulaire est utilisée, et lors de l'extension du projet, le code reste strictement ordonné.
Le tutoriel officiel “” explique comment organiser votre travail.
Typage statique strict
Go est statiquement typé, ce qui peut déstabiliser ceux qui sont habitués aux langages à typage dynamique comme Python et Ruby.
Il n'y a aucun doute que les langages dynamiques sont plus susceptibles aux erreurs, nécessitant davantage d'efforts de la part du développeur pour valider les entrées. Par exemple, une fonction qui calcule la somme de deux nombres entiers. Si une chaîne est passée à la fonction (ce qui n'est pas si rare), cela entraînera une erreur TypeError.
En Go, cela ne peut pas se produire, car ici il faut déclarer le type pour chaque variable et fonction, ainsi que le type que la fonction renverra.
Au début, c'est déroutant : je pensais que cette caractéristique de Go ralentissait le travail, mais j'ai finalement compris que déclarer tout cela fait réellement gagner du temps et réduit les risques d'erreur.
Parallélisme natif
Go a un support natif pour le parallélisme en utilisant des goroutines et des canaux - c'est pratique.
Le concept de canaux semble au début un peu déroutant. Cependant, avec le temps, il devient plus clair, et vous commencez à profiter des nouvelles possibilités en les utilisant activement.
Voici une visualisation de tout ce qui a été dit par .
package main
func main() {
// créer un nouveau canal du type int
ch := make(chan int)
// démarrer une nouvelle goroutine anonyme
go func() {
// envoyer 42 au canal
ch <- 42
}()
// lire depuis le canal
<-ch
} 
Plus d'exemples et .
Travailler avec JSON
Eh bien, json.loads() n'est plus. En Python, c'est simple : nous utilisons json.loads, et pas de problème.
Mais en Go, un langage à typage statique, cette opération devient plus complexe.
Ici, lors de l'utilisation de JSON, tout est défini à l'avance. Tout champ qui ne correspond pas à la structure définie sera ignoré, et c'est bien. On peut le considérer comme un protocole préalablement convenu entre deux parties. Les données que vous obtenez en JSON doivent être attendues, et les champs et types JSON sont « convenus » par les deux parties.
{
"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"`
}Bien sûr, vous pouvez désérialiser JSON sans structures, mais il est préférable d'éviter cela autant que possible en tenant compte de la nature statique du langage.
Le décodage JSON en Go s'explique le mieux ou .
Vous hésitez à convertir votre JSON en structure Go ? Pas de problème, .
Code propre
Le compilateur Go s'efforce toujours de garder votre code « propre ». Il considère les variables inutilisées comme une erreur de compilation. Go adopte une approche unique qui permet au système de résoudre la plupart des problèmes de formatage. Ainsi, Go exécute le programme gofmt lors de la sauvegarde ou de la compilation et corrige lui-même le formatage.
Vous ne vous souciez pas des variables ? Pas de problème ! Utilisez simplement _ (underscore) et attribuez-le à un identifiant vide.
Un excellent tutoriel pour cette partie de l'apprentissage du langage est l’information de “”.
Trouver la bibliothèque et le framework appropriés
J'ai utilisé des frameworks et des bibliothèques comme Flask, Jinja2, Requests et même Kazoo avec Python, j'avais donc peur de ne rien trouver de convenable pour Go.
Mais la communauté a déjà résolu ces problèmes : le langage dispose de bibliothèques uniques qui vous permettent d'oublier complètement ce que vous avez utilisé auparavant.
Voici mes préférées.
Python Requests => net/http
offre une implémentation HTTP client et serveur conviviale et facile à utiliser.
Flask + Jinja2 => Gin
est un framework HTTP avec une API très simple : paramètres dans le chemin, fichiers téléchargeables, routage de groupes (/ api / v1, / api / v2), formats de journal personnalisés, service de fichiers statiques, rendu HTML et middleware très puissant et personnalisé.
Évaluez le benchmark.
Création de CLI => Cobra
est une bibliothèque pour créer de puissantes applications CLI ainsi qu'un programme pour générer des applications et des fichiers de commande.
Cobra est utilisée dans de nombreux grands projets Go, y compris Kubernetes, etcd et OpenShift.
Voici quelques autres bibliothèques que je recommande vivement : , et cette liste incroyable — .
Autres ressources utiles
[1] vous devez absolument découvrir ces et .
[2] .
[3] .
[4] , , — comptes Twitter.
Bilan
En tant qu'utilisateur régulier de Python pendant cinq ans, j'avais peur que le passage à Go soit douloureux.
Mais non : il existe des ressources de la communauté Go qui étendent et complètent les capacités du langage, ainsi que divers outils utiles qui vous aideront également dans votre transition.
Go se développe rapidement et j'espère que Google pourra en faire le langage principal pour écrire des applications cloud et des infrastructures.
Rejoignez-nous !

Skillbox recommande :
- Cours pratique de deux ans .
- Cours en ligne éducatif .
- Cours pratique d'un an .
Source : habr.com
