# gob Ensemble de librairies personnalisées en Go ## Architecture ### collection Le paquet **collection** contient quelques fonctions utiles pour la gestion des slices (ajout, insertion, comparaison de slices, différence, intersection, conversion, map/reduce, etc.). Il implémente également quelques collections non présentes, à l’heure actuelle, dans la librairie standard : - Les piles : collection.Stack - Les files : collection.Queue - Les collections d’éléments uniques : collection.Set **collection/concurrent** est une sous-bibliothèque pour alimenter les slices et les maps de manière concurrente et en toute sécurité. **collection/json** permet de gérer des objets json (modification, parcours, import, export). ### compare Le paquet **compare** implémente différentes fonctions de comparaison de chaînes de caractères (insensible à la casse, tri naturel, prise en compte des accents, etc.), et permet d’aggréger plusieurs fonctions de comparaison. ### convert Le paquet **convert** fournit le nécessaire pour convertir des variables typées en d’autres types de manière transparente. Types actuellement gérés : - Booléens, - Caractères (rune, byte), - Entiers (int, int8, int16, int32, int64, uint, uint8, uint16, uint62, uint64), - Nombres à virgule flottante (float32, float64), - Nombres complexes (complex64, complex128), - Chaînes de caractères, - Collections (slice, map), - Structures. Tous ces types sont convertibles entre eux. ### datetime Le paquet **datetime** implémente des structures pour gérer des temps : - datetime.Clock : pour gérer une heure dans la journée, - datetime.Date : pour gérer une date, sans indication de l’heure, - datetime.DateTime : pour gérer une date avec indication de l’heure. - Range : pour gérer une période entre deux temps. ### number Le paquet **number** implémente une structure pour gérer des opérations sur les nombres réels. Un nombre peut être présenté sous différentes formes (dans une base donnée) : - Format entier (ex : 58) - Format décimal (ex : 36.25) - Format scientifique (ex : 42.5E-18) - Fraction (ex : 12/5) Un nombre peut être également indérminé (NaN, ±∞) ### format Le paquet **format** fournit le nécessaire pour formater la sortie terminal : - Alignement des entrées (utile pour afficher un tableau), - Couleurs et styles (gras, italique, etc.). Seuls les terminaux supportant les chaînes d’échappement ASCII sont supportés. ### ini Le paquet **ini** permet de parser et de gérer des fichiers de configuration (générations avec l’extension .ini ou .conf). ### option Le paquet **option** implémente en Go les types Option et Result existant dans certains langages de programmation (comme Rust). ### random Le paquet **random** fournit des fonctions pour générer des variables avec des caractères aléatoires. ### secret Le paquet **secret** permet de générer des hashs ou de chiffrer des chaînes de caractères. ### shell Le paquet **shell** regroupe des sous-paquets dédiés à faciliter la programmation d’applications en ligne de commandes. #### shell/command **shell/command** définit des interfaces permettant de parser les arguments d’une commande saisie. Une implémentation fonctionnelle est fournie dans le sous-paquet **shell/command/flag**. #### shell/console **shell/console** définit des interfaces dédiés à la programmation de CLI (_Command Line Interface_). Il fournit également des fonctions pour récupérer directement des entrées saisies dans le terminal dans des variables. #### shell/file **shell/file** permet de récupérer de façon détaillée les informations d’un fichier ou d’une arborescence de fichiers. #### shell/scanner **shell/scanner** fournit un outil pour découper une ou plusieurs lignes de caractères en mots selon des critères définis (chaîne d’échappment, guillemets, etc.).