web-dev-qa-db-fra.com

Structure immuable à Golang

Est-il possible de définir une structure immuable dans Golang? Une fois initialisé, alors uniquement une opération de lecture sur le champ de struct, aucune modification des valeurs de champ. Si oui, comment faire cela.

10

Il est possible de faire en sorte qu'une structure soit en lecture seule en dehors du package en rendant ses membres non exportés et en fournissant des lecteurs. Par exemple:

package mypackage

type myReadOnly struct {
  value int
}

func (s myReadOnly) Value() int {
  return s.value
}

func NewMyReadonly(value int) myReadOnly{
  return myReadOnly{value: value}
}

Et utilisation:

myReadonly := mypackage.NewMyReaonly(3)
fmt.Println(myReadonly.Value())  // Prints 3
18

Il n'y a aucun moyen de marquer les champs/variables comme lus uniquement de manière générique. La seule chose que vous puissiez faire est de marquer les champs/variables comme non exportés (première lettre petite) et de fournir des getters publics pour empêcher d’autres progiciels d’éditer des variables.

1
Arman Ordookhani