Mon parcours de Python à Go – partage de conseils et de ressources

Mon parcours de Python à Go – partage de conseils et de ressources

Du traducteur : ont été pour vous un article d'Ilad Leeva sur la transition de Python vers Go. 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 Développeur Python depuis le début.

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 ».

Mon parcours de Python à Go – partage de conseils et de ressources

Observations

La première chose que j'ai faite au début de mon parcours a été d'étudier le superbe tutoriel officiel “Tour Of Go”. Cela me donne une compréhension de la syntaxe du langage.

Pour améliorer mes connaissances, j'ai également lu le livre “Go for Python Programmers”, 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 “How to Write Go Code” 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 Ivan Daniiluk.

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
}

Mon parcours de Python à Go – partage de conseils et de ressources

Plus d'exemples ici et ici.

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 dans ce post ou ici.

Vous hésitez à convertir votre JSON en structure Go ? Pas de problème, cet outil fera tout pour vous.

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 “Effective Go”.

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

net/http offre une implémentation HTTP client et serveur conviviale et facile à utiliser.

Flask + Jinja2 => Gin

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 celui-ci le benchmark.

Création de CLI => Cobra

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 : Viper, Gonfig et cette liste incroyable — Awesome-Go.

Autres ressources utiles

[1] Francesc Campoy vous devez absolument découvrir ces a été abandonné. Le créateur de « Zefira » n'a pas pu être retrouvé. et profil GitHub.

[2] GopherCon — vidéos.

[3] Exemples Web Go.

[4] Golang Weekly, Gopher Academy, Golang News — 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 !

Mon parcours de Python à Go – partage de conseils et de ressources

Skillbox recommande :

Source : habr.com

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster