Mon chemin de Python à Go - partage de conseils et de ressources



D'un traducteur: traduit pour vous un article d'Ilad Leev sur la transition de Python à Go . L'article sera utile non seulement aux programmeurs débutants, mais aussi à toute personne intéressée par Go de quelque manière que ce soit.

J'aime Python. Cette langue est ma préférée depuis cinq ans. Il est sympathique, efficace et facile à apprendre. Utilisé pour presque 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, la vaste communauté et le fait que de plus en plus d'entreprises adoptent ce langage après des tests réussis m'ont forcé à y prêter attention et à me plonger dans la littérature. Mais ce post n'est pas sur ce qui est mieux - Python ou Go : il y a beaucoup de comparaisons sur le net. À mon avis, tout dépend de l'application. Je vais vous 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: Un développeur de cours pratique Python à partir de zéro .

Nous vous rappelons: pour tous les lecteurs de «Habr» - une remise de 10 000 roubles lors de l'inscription à un cours Skillbox en utilisant le code promo «Habr».




Observations


La première chose que j'ai faite au début du voyage a été d'étudier l'excellent tutoriel officiel Tour Of Go . Il donne une compréhension de la syntaxe du langage.

Afin d'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 habituelles que j'utilisais en Python (sérialiser JSON ou travailler avec des appels HTTP), et j'ai essayé de les écrire dans Go. Grâce à une telle comparaison visuelle, j'ai pu identifier les principales différences entre les langues.

Disposition du projet

Tout d'abord, Python ne nécessite pas de hiérarchie de répertoires spécifique, contrairement à Go.

Go utilise une disposition «standard» qui est un peu plus compliquée et nécessite plus de travail. D'un autre côté, par conséquent, nous obtenons une base de code bien structurée, qui utilise une structure modulaire, et lors de l'expansion du projet, le code reste strictement ordonné.

Le didacticiel officiel « Comment écrire du code Go » explique comment organiser votre travail.

Typage fort statique

Go est typé statiquement, et vous vous sentirez à l'aise pour ceux qui sont habitués aux langages typés dynamiquement comme Python et Ruby.

Il ne fait aucun doute que les langages dynamiques sont plus sujets aux erreurs; le développeur nécessite plus d'efforts pour vérifier les données d'entrée. Un exemple est une fonction qui calcule la somme de deux entiers. Si vous passez une chaîne à une fonction (ce qui n'est pas si rare), cela entraînera une erreur TypeError.

Cela ne peut pas se produire dans Go, car ici vous devez déclarer un type pour chaque variable et fonction et quel type de variable la fonction renverra.

Au début, c'était ennuyeux: il me semblait que cette fonctionnalité de Go ralentissait, mais ensuite on a compris qu'en fait, tout déclarer fait gagner du temps et réduit la probabilité d'une erreur.

Accès simultané natif

Go prend en charge la concurrence native en utilisant des routines et des canaux - c'est pratique.

Le concept de canaux semble au premier abord un peu déroutant. Cependant, au fil du temps, cela devient plus compréhensible et vous commencez à profiter de nouvelles opportunités en travaillant activement avec elles.

Voici une visualisation de tout ce qui a été dit par 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 } 



Plus d'exemples ici et ici .

Travailler avec JSON

Eh bien, json.loads () n'est plus. Tout est simple en Python: nous utilisons json.loads et il n'y a aucun problème.

Mais dans Go, un langage typé statiquement, cette opération devient plus compliquée.

Ici, lors de l'utilisation de JSON, tout est prédéfini. Tout champ qui ne rentre pas dans la structure donnée sera ignoré, et c'est bien. Cela peut être considéré comme un protocole pré-convenu entre les deux parties. Les données que vous avez reçues dans JSON doivent être attendues, et les champs et les types JSON sont «acceptés» 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 dans la mesure du possible cela doit être évité et la nature statique du langage doit être prise en compte.

Le décodage JSON sur GO est mieux expliqué dans cet article ou ici .

Paresseux pour convertir votre JSON en une structure Go? Pas de problème, cet outil fera tout pour vous .

Code propre

Le compilateur Go essaiera toujours de garder votre code propre. Il considère les variables inutilisées comme une erreur de compilation. Go utilise une approche unique qui permet au système de résoudre la plupart des problèmes de formatage. Ainsi, Go exécutera le programme gofmt lors de l'enregistrement ou de la compilation et corrigera indépendamment le formatage.

Vous souciez-vous des variables? Ok Utilisez simplement _ (souligné) et affectez-le à un identifiant vide.

Le tutoriel mastride pour cette partie du travail avec la langue est l'information de « Effective Go ».

Trouver la bonne bibliothèque et le bon cadre

J'ai utilisé des frameworks et des bibliothèques avec Python comme Flask, Jinja2, Requests et même Kazoo avec Python, donc j'avais peur de ne rien trouver de convenable pour Go.

Mais la communauté a déjà résolu ces problèmes: le langage possède ses propres bibliothèques uniques qui vous permettent d'oublier complètement ce que vous avez utilisé précédemment.

Voici mes favoris.

Demandes Python => net / http

net / http fournit une implémentation pratique et facile à utiliser du client et du serveur HTTP.

Flacon + Jinja2 => Gin

Gin est un framework web HTTP avec une API très simple: paramètres de chemin, fichiers téléchargeables, routage de groupe (/ api / v1, / api / v2), formats de journaux personnalisés servant des fichiers statiques, rendu HTML et un middleware personnalisé vraiment puissant.
Évaluez cette référence.

Création 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 batch.
Cobra est utilisé dans de nombreux grands projets Go, notamment Kubernetes, etcd et OpenShift.

Voici quelques autres bibliothèques que je recommande fortement: Viper , Gonfig, et cette liste impressionnante est Awesome-Go .

Autres ressources utiles


[1] Francesc Campoy - Vous devez absolument évaluer cette chaîne YouTube et ce profil GitHub .

[2] GopherCon - vidéo .

[3] Aller aux exemples Web .

[4] Golang Weekly , Gopher Academy , Golang News - Comptes Twitter.

Pour résumer


En tant qu'utilisateur régulier de Python pendant cinq ans, j'avais peur qu'aller sur Go soit douloureux.

Mais non: il y a les bases de la communauté Go, qui étend et complète les fonctionnalités du langage, ainsi que diverses ressources utiles qui vous aideront dans la transition.

Go se développe rapidement et j'espère que Google pourra en faire la langue principale pour l'écriture d'applications et d'infrastructures cloud.

Rejoignez-nous maintenant!



Skillbox recommande:

Source: https://habr.com/ru/post/fr444866/


All Articles