Structs immuables dans Go
Question : Est-il possible de créer une structure immuable dans Go, en garantissant qu'une fois initialisé, seules les opérations de lecture peuvent être effectuées sur ses champs sans modifier leurs valeurs ? Si oui, comment y parvenir ?
Réponse :
Dans Go, les structures sont intrinsèquement mutables. Cependant, il est possible de rendre une structure en lecture seule en dehors de son package en employant certaines techniques. Voici comment procéder :
Définir une structure immuable :
Définir une structure avec des champs non exportés (champs commençant par des lettres minuscules). Cela empêche l'accès direct aux champs depuis l'extérieur du package.
package mypackage type myReadOnly struct { value int }
Fournir des fonctions de lecteur :
Créez des fonctions de lecteur qui peuvent accéder aux champs privés de la structure. Ces fonctions renverront des copies des champs, garantissant que les valeurs d'origine restent inchangées.
func (s myReadOnly) Value() int { return s.value }
Initialisation de la structure immuable :
Créez une fonction qui initialise la structure et renvoie une instance. Cette fonction est utilisée pour créer de nouvelles instances de la structure immuable.
func NewMyReadOnly(value int) myReadOnly{ return myReadOnly{value: value} }
Utilisation :
Pour utiliser la structure immuable, importez le package et créez une instance en utilisant la fonction d'initialisation. Accédez aux champs à l'aide des fonctions de lecture.
myReadOnly := mypackage.NewMyReadOnly(3) fmt.Println(myReadOnly.Value()) // Prints 3
Dans cet exemple, toute tentative de modification du champ valeur de l'instance myReadOnly entraînera une erreur de compilation car le champ n'est pas exporté. La fonction lecteur Valeur permet d'accéder au champ sans le modifier. Cette approche crée effectivement une structure immuable dans Go.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!