Formation Go : Génériques et Itérateurs

Maîtrisez les génériques et itérateurs en Go pour écrire du code plus abstrait, performant et idiomatique, sans tomber dans l’excès.

Formation Go : Génériques et Itérateurs

Description

Cette formation Génériques et Itérateurs en Go vous permettra de maîtriser les génériques et les itérateurs afin de concevoir un code plus réutilisable et plus performant.

Pendant 2 jours, vous apprendrez à :

  • tirer pleinement parti des génériques pour factoriser vos fonctions et structures de données
  • exploiter les itérateurs pour parcourir efficacement des collections, y compris dans des scénarios complexes ou à grande échelle
  • Implémenter des types et fonctions génériques
  • Connaître les forces mais aussi les limitations des génériques tels qu'implémentés en Go
  • Consommer et implémenter des itérateurs

Public

Cette formation s’adresse aux développeur·se·s Go expérimenté·e·s souhaitant exploiter efficacement les génériques et itérateurs pour concevoir des abstractions robustes, performantes et idiomatiques.

Les objectifs

  • Savoir utiliser les génériques
  • Reconnaitre les bons des mauvais cas d'usage des génériques
  • Savoir appeler et concevoir des itérateurs
  • Reconnaitre les bons des mauvais cas d'usage des itérateurs

Pré-requis

  • Une expérience soutenue d'au moins quelques mois avec Go et une bonne compréhension des inferfaces et des méthodes
  • Des bases en anglais technique
  • Installation de Go (1.26+)
  • Installation de Visual Studio Code et de son extension Go
  • Installation de Git
  • Ordinateur portable à apporter

Le programme de la formation Go : Génériques et Itérateurs

Jour 1 : Génériques en Go (principes, contraintes et bonnes pratiques)

  • Préambule
    • Programmation générique et polymorphisme paramétrique : définitions
    • Cas d'usage et avantages des génériques
    • Un peu d'histoire sur l'avènement des génériques en Go
  • Paramètres de types
    • Paramètres de types
    • Conventions de nommage
    • Arguments de types et instantiation
    • Inférence de type : quand le compilateur vous facilite la vie
  • Fonctions génériques
    • Syntaxe
    • Les paquets slices et maps
  • Types génériques
    • Syntaxe
    • Méthodes de types génériques
    • Restrictions s'appliquant méthodes de types génériques
  • Alias de types génériques
    • Rappels sur les alias de types
    • Syntaxe
  • Contraintes de types
    • Une sorte de méta-types exprimés par des interfaces
    • Réinterprétation des interfaces, non plus comme ensembles de méthodes, mais comme ensembles de types
    • La contrainte de type pré-définie any
    • La contrainte de type pré-définie comparable
    • Valeurs de types comparables mais non-réflexives pour l'égalité : danger !
    • Union d'ensembles de types
    • Ensemble de types basés sur un même type (ex : ~string)
    • Le paquet cmp et la contrainte de type cmp.Ordered
    • Le paquet golang.org/x/exp/constraints
    • Restrictions s'appliquant aux contraintes de types
    • Contraindre ou ne pas contraindre : telle est la question !
  • Techniques avancées
    • Contraintes de types pointeurs
    • Contraintes de types recursives
    • Types fantômes
  • Usage et abus des génériques
    • Quand préférer d'autres approches (réflexion, génération de code, etc.)
    • Quand l'utilisation tourne à l'abus : cas d'étude
  • Resources d'apprentissage externes

Mises en pratique :

  • "Générification" d'une fonction conçue pour vérifier chaque élément d'une slice
  • "Générification" d'un envoi annulable sur une channel
  • "Générification" d'une structure de donnée représentant un ensemble
  • "Générification" d'une fonction afin qu'elle puisse opérer indifféremment sur une chaîne de caractères ou une slice d'octets
  • "Générification" d'un arbre binaire de recherche
  • Refonte de l'arbre binaire de recherche générique à l'aide d'une contrainte de type récursive
  • Refonte de l'arbre binaire de recherche générique pour le libérer de sa contraintes de type

Jour 2 : Itérateurs en Go (conception, performance et cas d’usage avancés)

  • Préambule
    • Itérateur : définition
    • Motivations : découplage, flexibilité, performance
    • Pourquoi l'arrivée des itérateurs en Go est-elle si tardive ?
    • Implémentation d'itérateurs avant Go 1.23
  • Le paquet iter et les trois formes d'itérateurs push
    • Le type générique iter.Seq : une séquence de valeurs
    • Le type générique iter.Seq2 : une séquence de couples (clé, valeur)
    • Quid d'iter.Seq0 ?
  • Consommer un itérateur
    • Boucle for-range sur un itérateur
    • Consommation d'un iter.Seq
    • Consommation d'un iter.Seq2
  • Etude de fabriques d'itérateurs existants
    • Fabrique d'itérateur : une fonction ou méthode qui renvoie un itérateur
    • Conventions de nommage pour les fabriques d'itérateurs
    • Passage en revue de fabriques d'itérateurs de la bibliothèque standard
    • Itérateurs à usage unique et autres
  • Implémentation d'itérateurs
    • Fonction conventionnellement appellée "yield" : rôle et fonctionement
    • Implémentation d'un iter.Seq
    • Implémentation d'un iter.Seq2
    • Pièges à éviter à propos de la fonction "yield"
  • Considérations liées à la performance
    • Itérateurs purs et itérateurs impurs
    • Implémentation efficace d'un itérateur sur une structure de données récursive
    • Optimiser un itérateur pour sa consommation partielle
  • Applications avancées d'itérateurs push
    • Combinaison d'itérateurs
    • Itérateur représentant une séquence conceptuellement infinie
    • Le pattern pipeline revisité à l'aune des itérateurs
  • Les itérateurs pull
    • Itérateurs push et itérateurs pull
    • Cas d'usage d'un itérateur pull
    • Conversion d'un itérateur push en itérateur pull
    • Consommation d'un itérateur pull
    • Piège à éviter : fuite malencontreuse d'un itérateur pull
  • Usage et abus des itérateurs
    • Etude de cas : résultat de type slice constituant un vecteur de déni de service
    • Quand une slice ou une map fait mieux l'affaire
  • Resources d'apprentissage externes

Mises en pratique :

  • Ecriture et exécution de benchmarks comparant une fonction renvoyant une slice et une fonction renvoyant un itérateur
  • Implémentation d'un itérateur permettant la pagination d'une API REST côté client
  • Implémentation et optimisation d'itérateurs permettant le parcours d'un arbre binaire générique
  • Implémentation d'un combinateur d'itérateur
  • Ré-usinage d'un pattern de type "pipeline" visant à connecter ses étapes, non pas par des channels, mais par des itérateurs
  • Implémentation d'un itérateur représentant une séquence conceptuellement infinie
  • Utilisation d'un itérateur pull pour vérifier si deux arbres binaires génériques contiennent les mêmes éléments dans le même ordre

Télécharger le programme

Formateur

Julien CRETEL

Julien est à la fois développeur, chercheur en sécurité Web et formateur.

Son langage de prédilection est le Go, sujet sur lequel il a formé des centaines de professionnel·le·s depuis 2019. Il contribute régulièrement au projet Go et intervient de temps à autre sur le Go et des sujets connexes lors de conférences spécialisées telles que GopherCon 2023 Europe.

Julien est actif dans le domaine de la sécurité Web. En marge des tests de sécurité (tests d'intrusion, évaluation de vulnérabilité, audit de codes, etc.) que ses clients lui confient et de ses activités de recherche indépendante, Julien forme régulièrement des professionnel·le·s sur la sécurité Web. Il s'adonne aussi, de temps à autre, à la chasse au bogues de sécurité (bug-bounty hunting).

Julien partage ses réflexions et sa recherche sur son blog, qui est, sans surprises, principalement dédié au langage Go et à la sécurité Web.

FAQ

Nos formations sont éligibles à plusieurs dispositifs de financement, selon votre situation. Human Coders est certifié Qualiopi, ce qui permet la prise en charge par des organismes comme Pôle emploi, votre OPCO ou encore le CPF (Compte Personnel de Formation) pour certaines formations.

Pour en savoir plus, veuillez consulter notre page : Comment financer votre formation ?

Oui, la formation peut être proposée en présentiel ou en distanciel. Pour les inter-entreprises, les modalités (présentiel ou à distance) sont fonction de la session.

Nous pouvons organiser des sessions à d'autres dates ou dans d'autres villes (Bordeaux, Lille, Lyon, Marseille, Montpellier, Nantes, Nice, Paris, Strasbourg, Toulouse...)

Les formations se déroulent toujours en petit groupe de 3 à 6 stagiaires. Nous souhaitons que les formateurs et formatrices puissent passer un maximum de temps avec chacun·e.

Voici une journée type :

  • 9h : vous êtes accueillis par votre formateur·rice autour d'un petit déjeuner (croissants, pains au chocolat, jus de fruit, thé ou café...)
  • 9h30 : la formation commence
  • 12h30 : pause de midi. Le·a formateur·rice mangera avec vous. C'est l'occasion d'avoir des discussions plus informelles.
  • 14h : reprise de la formation
  • 18h : fin de la journée

8 raisons de participer à une formation Human Coders

  • Satisfaction client élevée : Un taux de statisfaction de 4,6/5 depuis 2012 (sur 1801 sessions réalisées). 99% des participants se disent satisfaits de nos formations
  • Approche pédagogique unique : Des formations en petit groupe, des formateurs passionnés et expérimentés, de véritables workshops... (Plus d'infos sur notre manifeste)
  • Catalogue de formations complet : 210 formations au catalogue, de quoi vous accompagner sur tout vos projets
  • Écosystème dynamique : Nous accompagnons les dev depuis 13 ans avec des initiatives comme Human Coders News, les Human Talks, le podcast ou encore notre serveur Discord
  • Financement facilité : Organisme certifié Qualiopi, indispensable pour que vous puissiez obtenir des aides au financement via votre OPCO
  • Références clients prestigieuses : De nombreux clients qui nous font confiance depuis des années
  • Accompagnement sur mesure : Nous vous proposons un accompagnement personnalisé par nos consultants pour vous aider dans vos projets au-delà de la formation
  • Valorisation professionnelle : Remise d'un diplôme, d'une attestation et d'une certification, suivant les formations effectuées, que vous pourrez afficher sur vos CV et réseaux sociaux

* Nombre de personnes ayant répondu au questionnaire de satisfaction sur cette formation depuis 2012