Maison > développement back-end > Golang > Pouvez-vous créer des structures immuables dans Go ?

Pouvez-vous créer des structures immuables dans Go ?

Mary-Kate Olsen
Libérer: 2024-11-12 03:32:02
original
1084 Les gens l'ont consulté

Can You Create Immutable Structs in Go?

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
}
Copier après la connexion

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
}
Copier après la connexion

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}
}
Copier après la connexion

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal