Les billets de blog

Golang, comment définir un destructeur

Si vous avez un peu bourlingué sur Go, vous savez qu’il n’existe pas de “destructeur” sur les structures. Mais en cherchant un peu, vous allez pouvoir utiliser le garbage collector et simuler un destructeur. Je me suis rendu compte en utilisant un peu Go pour créer mon blog, que si je ne faisais pas attention je pouvais avoir des centaines de connections à la base Mongo ouvertes et jamais fermées.

Go-Pipe, streamez à la unix/like en Go

Vous connaissiez les “pipelines” de Gulp, et bien voici celles de Go grâce à un boulot intéressant (mais datant d’un an déjà) de Gustavo Niemeyer sur sa page Go.pipe - un package permettant de traiter des flux, d’ajouter ses propres traitements, et surtout sans trop de douleurs. L’idée est simple. En bash, on utilise des pipelines. C’est une notion courante qui utilise une notation spéciale qui permet de rediriger des entrée/sorties de commandes en commandes.

L'intérêt des closures en Go

Vous avez entendu parler des “closures” et “generators” qui sont implémentés par plusieurs langages (comme le Python). Mais je sais aussi que beaucoup n’ont pas conscience de l’intérêt particulier de ce pattern. Et comme je me suis retrouvé dans une situation où un generator m’a fait gagné beaucoup de temps, je vais vous montrer à quoi ça sert avec deux exemples: un qui explique le fonctionnement, et un autre qui peut vous rendre service, à savoir “itérer indéfiniement”.

JWT en Go

Vous avez envie de gérer l’autorisation de vos API REST en Go avec JWT ? Personnellement c’est mon cas. Alors voilà comment on s’y prend. JWT (JSON Web Token) est fortement utilisé depuis plusieurs années maintenant. Il permet de signer une clef et de permettre l’autorisation d’un utilisateur dans des échanges client-serveur. Il est intégré au protocole OAuth2 et bénéficie d’une RFC. Pour faire simple, c’est un peu comme gérer des sessions… Mais sans session.

Golang, résoudre le souci d'indexation de type défini

Golang permet de créer ses prores types et notamment de faire un alias de “map”, mais un jour, en voulant récupérer une valeur indexée dans le map, vous recevez un fameux “type *Foo does not support indexing” lors de la compilation. Ce souci peut-être rapidement réglé à condition de comprendre pourquoi et comment cette erreur arrive. TL;DR Vous vous trompez ! Un map est déjà un pointeur, donc arrêtez d’attendre un pointeur sur ce type.

Assigner une variable lors de la compilation en Go

Je viens de faire une release de mon outil idok et je me suis posé cette fameuse question: comment faire pour assigner la version dans mon binaire sans avoir à modifier le code source ? Et bien c’est simple comme tout mais il faut le savoir. Voilà la méthode. Prenons un exemple de programme dont vous avez assigné une valeur de version et qui l’affiche: package main import ( "fmt" ) const VERSION="heuuuu" func main(){ fmt.