Formation Go Avancé

Notée : (41)*

Approfondissez vos connaissances avec le langage Go : apprenez à bien tester votre code, à améliorer les performances et sécuriser vos applications lors de cette formation Go Avancé.

Prix (Formation inter-entreprise)

1900€ HT / personne

Durée

3 jours

Dates

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

Go séduit de plus en plus de monde par sa simplicité, ses fonctionnalités de concurrence natives, sa polyvalence, sa stabilité, sa performance, etc. Il serait dommage de ne pas tirer parti de tout ce que le langage et son écosystème a à offrir ! (La formation vient d'être mise à jour pour Go 1.18.)

Cette formation Go Avancé s'adresse à toute personne, développeur·se, chercheur·e, ingénieur·e... souhaitant approfondir son utilisation du langage Go.

Durant ces trois jours de formation, vous apprendrez des techniques visant à améliorer votre code en terme d'exactitude, de maintenabilité, de testabilité, de performance et de sécurité.

Cette formation sera entrecoupée de travaux pratiques concrets visant à assimiler chaque nouvelle notion rencontrée.

À l'issue de cette formation Go Avancé, vous repartirez avec le code source du projet développé lors de ces trois jours, ainsi que la solution du formateur (sur GitHub).

Si vous débutez avec le langage de programmation Go ou souhaitez revoir les bases, jetez un oeil à la formation Go !

Covid-19: Nous restons ouverts. Cette formation est disponible à distance.
🇺🇸 This training is also available in English

Les objectifs

  • Approfondir ses connaissances du langage Go et de son écosystème
  • Assimiler les bonnes pratiques de qualité logicielle en Go
  • Maitriser les patterns de concurrence utiles

Pré-requis

  • Une bonne connaissance des fondamentaux du langage Go et de son écosystème
  • Une expérience régulière d'au moins trois mois avec Go
  • Des bases en anglais technique
  • Ordinateur portable à apporter

Le programme de la formation Go Avancé

Jour 1 : Exactitude et maintenabilité

Bonne pratiques générales
  • Optimisez votre code pour la lecture
  • Evitez les packages unsafe et reflect
  • Encapsulez vos types proprement
  • Distinguez types métier et data-transfer objects (DTOs)
  • Rendez la valeur vierge directement utilisable
  • Evitez les littéraux de structs sans clés
  • Evitez les variables globales
  • Functional options

Mises en pratique : de multiples exercices sur les différents thèmes abordés

Documentation et tests
  • Documentation de packages ; exemples exécutables
  • Table de tests
  • Injection de dépendances
  • Mocking/stubbing : adaptateur pour interface à une seule méthode

Mises en pratique :
- Documentation d'un package existant
- Ecriture d'un exemple exécutable
- Utilisation d'un stub du client HTTP dans des tests unitaires

Gestion avancée d'erreurs
  • Les écueils à éviter
  • Au delà de l'idiome if err != nil
  • Déclaration de types d'erreurs personnalisés
  • Le package errors
  • Enrobage d'erreurs et inspection de la chaîne d'erreurs

Mises en pratique :
- Déclaration d'un type erreur haut niveau
- Inspection de la chaîne d'erreurs

Packages
  • Utilisation de packages internes
  • Conseils pour éviter les cycles de dépendances
  • Modularisation judicieuse du code en packages
  • Quelques pistes pour faire du Domain-Driven Design en Go

Mises en pratique : addition d'un package interne à un projet existant

Génériques (nouveau en Go 1.18)
  • Qu'est-ce que les génériques ?
  • L'intérêt des génériques
  • Types et fonctions génériques
  • Contraintes de types
  • Contraintes pré-déclarées : any et comparable
  • Le package contraints
  • Restriction en relation aux méthodes
  • Contraintes de types récursives
  • Ecueils à éviter

Mises en pratique : implémentation d'un arbre binaire générique

Jour 2 : Concurrence avancée

Rappels sur la concurrence
  • Goroutines
  • Channels
  • Le mot-clé select
  • Subtilités du modèle mémoire de Go
  • Situations de compétition
  • Fuite de goroutines

Mises en pratique : identification et débogage d'une situation de compétition

Contextes
  • Goroutines annulables
  • Le type context.Context
  • Trois façons de détecter l'annulation d'un contexte
  • Dérivation de contextes
  • Contextes remarquables : context.Background() et context.TODO()
  • Arbre des contextes
  • Contextes et APIs de packages
  • Un type déchiré entre deux objectifs distincts
  • Stocker et récupérer des valeurs avec context.Context
  • Bonnes et mauvaises pratiques

Mises en pratique :
- Rendre une goroutine annulable
- Débogage d'une simple simulation de ping-pong
- Annulation d'une requête côté client
- Annulation des tâches liées à une requête côté serveur

Patterns de concurrences
  • Evitez time.Tick and time.After
  • Laissez à l'appelant le choix du pattern de concurrence
  • Ne présupposez pas qu'un type est concurrency-safe
  • Le pattern fan-out et ses limitations
  • Pool of workers
  • Sémaphores
  • Délestage (load shedding)
  • Requêtes redondantes
  • Requêtes de secours (hedged requests)
  • Slices et concurrency safety
  • Exécution unique avec sync.Once

Mises en pratique : de multiples exercices sur chaque pattern de concurrence abordé

Jour 3 : Performance et sécurité

Macro-optimisation
  • Profilage de code avec pprof
  • Le package net/http/pprof
  • Traceur d'exécution
  • Réglage du ramasse-miettes

Mises en pratique :
- Identification des goulets d'étranglement et optimisation d'un utilitaire avec pprof
- Optimisation de la concurrence d'un utilitaire grâce au traceur d'exécution

Micro-optimisation
  • Contraintes d'alignement mémoire et remplissage
  • Optimisation de l'empreinte mémoire des structures
  • Micro-benchmarks
  • Subtilités du ramasse-miettes
  • Escape analysis et réduction de la pression sur la pile
  • Réduction de la taille des exécutables

Mises en pratique : de multiples exercices sur les différents thèmes abordés

Bonnes pratiques de sécurité
  • Go : un langage et écosystème sécurisant
  • Bonnes et mauvaises pratiques de déclaration d'énumérations
  • Intégrité des dépendances
  • Bornez le degré de concurrence
  • Situations de compétition et leurs dangers

Mises en pratique : de multiples exercices sur les différents thèmes abordés

Analyse statique et dynamique de code
  • semgrep
  • gosec
  • Fuzzing (nouveau en Go 1.18)

Mises en pratique : de multiples exercices sur les différents thèmes abordés

Sécurité Web
  • Templates
  • N'exposez pas vos endpoints pprof
  • Configuration judicieuse des clients et serveurs HTTP
  • Risques liés au content-type sniffing
  • Messages d'erreurs verbeux
  • Path traversal
  • Configuration judicieuse des CORS
  • Problèmes d'inter-opérabilité JSON

Mises en pratique :
- identification, exploitation et résolution des failles de sécurité évoquées
- études de cas

Discussion ouverte

Télécharger le programme

Le(s) formateur(s)

Julien Cretel

Julien Cretel

Julien est développeur et chercheur en sécurité indépendant. Go, sécurité Web, bug bounty hunting, programmation fonctionnelle, technologies serverless... Julien a plusieurs amours, mais le langage Go tient une place particulière dans son coeur et est devenu son outil de choix pour le backend Web. Il a un blog principalement dédié à Go et la sécurité informatique disponible sur https://jub0bs.com.

Voir son profil détaillé

A propos de Human Coders

Human Coders c'est un centre de formation pour développeurs avec :

  • une certification Qualiopi, indispensable pour que vous puissiez obtenir des aides au financement via votre OPCO
  • de nombreux clients qui nous font confiance depuis des années
  • un manifeste pour garantir des formations à taille humaine, des formateurs passionnés, de véritables workshops...
  • 88 formations au catalogue, 1169 sessions depuis nos débuts en 2012 avec une moyenne de satisfaction de 4,6/5
  • la possibilité de vous proposer un accompagnement personnalisé ou du conseil après la formation

11 témoignages

Formation d'excellente qualité avec un formateur compétent, pédagogue et très agréable qui s'est parfaitement adapté au public de la formation.

Olivier MUSSE
Bow Medical

Amazing training! I love the practical examples illustrating a relevant theoretical course. The program is rich, complete and up-to-date (like generics), with metaphors and warnings about common pitfalls. The pace is perfect. An excellent addition to the books. Eager to apply all the knowledge seen during this training!

David APARICIO
OVH

In summary it was preatty good training. Full of good materials. I really appreciate trainer's knowledge and experience.

Stanislaw ZIELINSKI
OVH

Julien est un super coach. Les presentations étaient claires et très did

Patricio TULA
OVH

Vachement cool

Suliac LE GUILLOU
OVH

Très bonne formation, Julien connaît son sujet et répond à toutes les questions sans problèmes. :)

Tom ADELE
OVH

Très bonne formation enrichissante

Olivier Blondeau
OVH

Selon les préférences de chacun, cette formation peut-être perçue comme du "go intermédiaire" et/ou du "go avancé". Formation plutôt complète sans être exhaustive (impossible d'être exhaustif en seulement 3 jours si l'on veut que les informations soient retenues).

Etienne PARDO
OVH

Programme très intéressant.

Duc VAN TRANG
OVH

j'ai apprécié les points abordés, qui correspondent a des besoins réels.

Marc DRUELLE
OVH

Un très bon tour d'horizon de ce qui existe en go. L'alternance entre concepts, explications, exercices et optimisation rend cette formation très bien rythmée.

Simon Lecoq
OVH

Besoin d'aide ?

Vous souhaitez discuter avec nous à propos de votre projet de formation ?
Vous voulez plus d'information sur une formation ou notre fonctionnement ?


Rappel Email

Nos forces

  • Des formations à taille humaine
  • Des formateurs passionnés
  • Des véritables workshop
Accéder au Manifeste

Nos clients

Radio France
Sénat
GreenPeace France
Ministère de la Justice
Yes We Dev - Our Real Win SAS
CNRS

Formation Go Avancé

Notée : (41)*

Approfondissez vos connaissances avec le langage Go : apprenez à bien tester votre code, à améliorer les performances et sécuriser vos applications lors de cette formation Go Avancé.

Go séduit de plus en plus de monde par sa simplicité, ses fonctionnalités de concurrence natives, sa polyvalence, sa stabilité, sa performance, etc. Il serait dommage de ne pas tirer parti de tout ce que le langage et son écosystème a à offrir ! (La formation vient d'être mise à jour pour Go 1.18.)

Cette formation Go Avancé s'adresse à toute personne, développeur·se, chercheur·e, ingénieur·e... souhaitant approfondir son utilisation du langage Go.

Durant ces trois jours de formation, vous apprendrez des techniques visant à améliorer votre code en terme d'exactitude, de maintenabilité, de testabilité, de performance et de sécurité.

Cette formation sera entrecoupée de travaux pratiques concrets visant à assimiler chaque nouvelle notion rencontrée.

À l'issue de cette formation Go Avancé, vous repartirez avec le code source du projet développé lors de ces trois jours, ainsi que la solution du formateur (sur GitHub).

Si vous débutez avec le langage de programmation Go ou souhaitez revoir les bases, jetez un oeil à la formation Go !

Covid-19: Nous restons ouverts. Cette formation est disponible à distance.
🇺🇸 This training is also available in English

Les objectifs

  • Approfondir ses connaissances du langage Go et de son écosystème
  • Assimiler les bonnes pratiques de qualité logicielle en Go
  • Maitriser les patterns de concurrence utiles

Pré-requis

  • Une bonne connaissance des fondamentaux du langage Go et de son écosystème
  • Une expérience régulière d'au moins trois mois avec Go
  • Des bases en anglais technique
  • Ordinateur portable à apporter

Le programme de la formation Go Avancé

Jour 1 : Exactitude et maintenabilité

Bonne pratiques générales
  • Optimisez votre code pour la lecture
  • Evitez les packages unsafe et reflect
  • Encapsulez vos types proprement
  • Distinguez types métier et data-transfer objects (DTOs)
  • Rendez la valeur vierge directement utilisable
  • Evitez les littéraux de structs sans clés
  • Evitez les variables globales
  • Functional options

Mises en pratique : de multiples exercices sur les différents thèmes abordés

Documentation et tests
  • Documentation de packages ; exemples exécutables
  • Table de tests
  • Injection de dépendances
  • Mocking/stubbing : adaptateur pour interface à une seule méthode

Mises en pratique :
- Documentation d'un package existant
- Ecriture d'un exemple exécutable
- Utilisation d'un stub du client HTTP dans des tests unitaires

Gestion avancée d'erreurs
  • Les écueils à éviter
  • Au delà de l'idiome if err != nil
  • Déclaration de types d'erreurs personnalisés
  • Le package errors
  • Enrobage d'erreurs et inspection de la chaîne d'erreurs

Mises en pratique :
- Déclaration d'un type erreur haut niveau
- Inspection de la chaîne d'erreurs

Packages
  • Utilisation de packages internes
  • Conseils pour éviter les cycles de dépendances
  • Modularisation judicieuse du code en packages
  • Quelques pistes pour faire du Domain-Driven Design en Go

Mises en pratique : addition d'un package interne à un projet existant

Génériques (nouveau en Go 1.18)
  • Qu'est-ce que les génériques ?
  • L'intérêt des génériques
  • Types et fonctions génériques
  • Contraintes de types
  • Contraintes pré-déclarées : any et comparable
  • Le package contraints
  • Restriction en relation aux méthodes
  • Contraintes de types récursives
  • Ecueils à éviter

Mises en pratique : implémentation d'un arbre binaire générique

Jour 2 : Concurrence avancée

Rappels sur la concurrence
  • Goroutines
  • Channels
  • Le mot-clé select
  • Subtilités du modèle mémoire de Go
  • Situations de compétition
  • Fuite de goroutines

Mises en pratique : identification et débogage d'une situation de compétition

Contextes
  • Goroutines annulables
  • Le type context.Context
  • Trois façons de détecter l'annulation d'un contexte
  • Dérivation de contextes
  • Contextes remarquables : context.Background() et context.TODO()
  • Arbre des contextes
  • Contextes et APIs de packages
  • Un type déchiré entre deux objectifs distincts
  • Stocker et récupérer des valeurs avec context.Context
  • Bonnes et mauvaises pratiques

Mises en pratique :
- Rendre une goroutine annulable
- Débogage d'une simple simulation de ping-pong
- Annulation d'une requête côté client
- Annulation des tâches liées à une requête côté serveur

Patterns de concurrences
  • Evitez time.Tick and time.After
  • Laissez à l'appelant le choix du pattern de concurrence
  • Ne présupposez pas qu'un type est concurrency-safe
  • Le pattern fan-out et ses limitations
  • Pool of workers
  • Sémaphores
  • Délestage (load shedding)
  • Requêtes redondantes
  • Requêtes de secours (hedged requests)
  • Slices et concurrency safety
  • Exécution unique avec sync.Once

Mises en pratique : de multiples exercices sur chaque pattern de concurrence abordé

Jour 3 : Performance et sécurité

Macro-optimisation
  • Profilage de code avec pprof
  • Le package net/http/pprof
  • Traceur d'exécution
  • Réglage du ramasse-miettes

Mises en pratique :
- Identification des goulets d'étranglement et optimisation d'un utilitaire avec pprof
- Optimisation de la concurrence d'un utilitaire grâce au traceur d'exécution

Micro-optimisation
  • Contraintes d'alignement mémoire et remplissage
  • Optimisation de l'empreinte mémoire des structures
  • Micro-benchmarks
  • Subtilités du ramasse-miettes
  • Escape analysis et réduction de la pression sur la pile
  • Réduction de la taille des exécutables

Mises en pratique : de multiples exercices sur les différents thèmes abordés

Bonnes pratiques de sécurité
  • Go : un langage et écosystème sécurisant
  • Bonnes et mauvaises pratiques de déclaration d'énumérations
  • Intégrité des dépendances
  • Bornez le degré de concurrence
  • Situations de compétition et leurs dangers

Mises en pratique : de multiples exercices sur les différents thèmes abordés

Analyse statique et dynamique de code
  • semgrep
  • gosec
  • Fuzzing (nouveau en Go 1.18)

Mises en pratique : de multiples exercices sur les différents thèmes abordés

Sécurité Web
  • Templates
  • N'exposez pas vos endpoints pprof
  • Configuration judicieuse des clients et serveurs HTTP
  • Risques liés au content-type sniffing
  • Messages d'erreurs verbeux
  • Path traversal
  • Configuration judicieuse des CORS
  • Problèmes d'inter-opérabilité JSON

Mises en pratique :
- identification, exploitation et résolution des failles de sécurité évoquées
- études de cas

Discussion ouverte

Télécharger le programme

Le(s) formateur(s)

Julien Cretel

Julien Cretel

Julien est développeur et chercheur en sécurité indépendant. Go, sécurité Web, bug bounty hunting, programmation fonctionnelle, technologies serverless... Julien a plusieurs amours, mais le langage Go tient une place particulière dans son coeur et est devenu son outil de choix pour le backend Web. Il a un blog principalement dédié à Go et la sécurité informatique disponible sur https://jub0bs.com.

Voir son profil détaillé

A propos de Human Coders

Human Coders c'est un centre de formation pour développeurs avec :

  • une certification Qualiopi, indispensable pour que vous puissiez obtenir des aides au financement via votre OPCO
  • de nombreux clients qui nous font confiance depuis des années
  • un manifeste pour garantir des formations à taille humaine, des formateurs passionnés, de véritables workshops...
  • 88 formations au catalogue, 1169 sessions depuis nos débuts en 2012 avec une moyenne de satisfaction de 4,6/5
  • la possibilité de vous proposer un accompagnement personnalisé ou du conseil après la formation

11 témoignages

Formation d'excellente qualité avec un formateur compétent, pédagogue et très agréable qui s'est parfaitement adapté au public de la formation.

Olivier MUSSE
Bow Medical

Amazing training! I love the practical examples illustrating a relevant theoretical course. The program is rich, complete and up-to-date (like generics), with metaphors and warnings about common pitfalls. The pace is perfect. An excellent addition to the books. Eager to apply all the knowledge seen during this training!

David APARICIO
OVH

In summary it was preatty good training. Full of good materials. I really appreciate trainer's knowledge and experience.

Stanislaw ZIELINSKI
OVH

Julien est un super coach. Les presentations étaient claires et très did

Patricio TULA
OVH

Vachement cool

Suliac LE GUILLOU
OVH

Très bonne formation, Julien connaît son sujet et répond à toutes les questions sans problèmes. :)

Tom ADELE
OVH

Très bonne formation enrichissante

Olivier Blondeau
OVH

Selon les préférences de chacun, cette formation peut-être perçue comme du "go intermédiaire" et/ou du "go avancé". Formation plutôt complète sans être exhaustive (impossible d'être exhaustif en seulement 3 jours si l'on veut que les informations soient retenues).

Etienne PARDO
OVH

Programme très intéressant.

Duc VAN TRANG
OVH

j'ai apprécié les points abordés, qui correspondent a des besoins réels.

Marc DRUELLE
OVH

Un très bon tour d'horizon de ce qui existe en go. L'alternance entre concepts, explications, exercices et optimisation rend cette formation très bien rythmée.

Simon Lecoq
OVH

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