Category

Go Programming

Go language tutorials, patterns, and best practices

63 posts

Mettre en place un limiteur de débit à seau de jetons haute performance en Go

En tant que développeurs Go créant des microservices évolutifs, la gestion des pics de trafic est un défi critique. Les volumes de requêtes incontrôlés peuvent entraîner une dégradation du système, l'épuisement des connexions à la base de données ou des défaillances en cascade. Bien qu'il existe de nombreuses stratégies de limitation de débit, l'algorithme du seau de jetons reste le...

Maîtriser le package context de Go : Une plongée profonde

Dans l'évolution de Go, peu de packages ont été aussi pivotaux ou mal compris que context. Depuis son introduction dans Go 1.7, il est devenu le mécanisme standard pour transporter des délais d'expiration, des signaux d'annulation et des valeurs spécifiques à la requête à travers les limites de l'API. Pour les développeurs intermédiaires à avancés, aller au-delà de l'utilisation de base est essentiel pour écrire des applications concurrentes robustes, maintenables et évolutives.

Construire un cache LRU thread-safe en Go : modèles de concurrence et benchmarking par rapport à sync.Map

La concurrence est l'un des principaux atouts de Go, mais elle introduit de la complexité lors de la gestion de l'état partagé. Un besoin courant dans les applications Go haute performance est un cache en mémoire avec une politique d'éviction LRU (Least Recently Used). Bien que la bibliothèque standard de Go propose sync.Map pour les magasins de clés-valeurs concurrents, il n'est pas optimisé pour les charges de travail de mise en cache. Dans cet article, nous explorerons comment implémenter un cache LRU robuste et thread-safe en utilisant un sync.Mutex et un sync.Cond, et nous le comparerons à sync.Map pour comprendre leurs compromis respectifs.

Maîtriser la limitation de débit à haut débit en Go : Une implémentation du seau à jetons

Dans le paysage des systèmes distribués modernes, protéger votre API des pics de trafic et des abus malveillants est non négociable. Bien que les compteurs à fenêtre fixe simples soient faciles à implémenter, ils souffrent souvent de problèmes de limites où les demandes doublent juste au moment de la réinitialisation de la fenêtre. L'algorithme du seau à jetons...

Construire des services Go résilients : Maîtriser les mécanismes de retry et les disjoncteurs

Dans le monde des systèmes distribués et des microservices, les pannes ne sont pas une question de « si », mais de « quand ». Partitions réseau, timeouts de base de données et pannes d'API tierces sont inévitables. Pour les développeurs Go, il est crucial de construire des services capables de gérer ces pannes transitoires avec élégance afin de maintenir ...

Débloquer puissance et sécurité : Exemples pratiques de génériques Go pour le développement moderne

Depuis l'introduction de Go 1.18, les génériques sont devenus l'une des fonctionnalités les plus attendues de l'histoire du langage. Pendant des années, les développeurs Go s'appuyaient sur des outils de génération de code comme stringer ou des assertions d'interface manuelles pour assurer la sécurité des types sans code répétitif. Bien que efficaces, ces solutions de contournement...

Les génériques Go en action : exemples pratiques pour le marshaling JSON et les utilitaires de tranches personnalisés

Depuis la sortie de Go 1.18, le langage de programmation Go a connu une évolution significative avec l'introduction des paramètres de type, communément appelés « génériques ». Pendant des années, les développeurs Go s'appuyaient sur interface{} (interfaces vides) et la réflexion pour obtenir une flexibilité de type, souvent au prix de la sécurité...