Dans le langage Go, l'encapsulation fait référence à la liaison des données et des méthodes d'exploitation des données pour former une unité indépendante, empêchant ainsi les utilisateurs externes d'accéder directement aux données et garantissant la sécurité des données et l'efficacité du fonctionnement. Cet article explique comment implémenter l'encapsulation dans le langage Go.
En langage Go, le contrôle de la visibilité est implémenté via la dénomination. Si un nom de variable ou de méthode commence par une lettre majuscule, elle est accessible aux packages externes. Sinon, il est privé et ne sera pas accessible aux packages externes.
Par exemple, nous pouvons définir un type de structure :
type Person struct { Name string // 外部可访问 Age int // 外部可访问 sex string // 外部不可访问 }
Dans le code ci-dessus, Name et Age sont des propriétés accessibles en externe, tandis que le sexe est une propriété privée et ne peut être utilisé qu'en interne au sein du type Person.
En langage Go, les types de structure peuvent définir certaines méthodes pour exploiter leurs propres données. Nous pouvons implémenter l’encapsulation de méthodes grâce à certaines techniques.
2.1 Utiliser la structure comme récepteur de la méthode
Nous pouvons utiliser la structure comme récepteur de la méthode pour implémenter l'opération de la méthode sur les données de la structure.
type Person struct { Name string Age int } func (p *Person) SetName(name string) { p.Name = name } func (p *Person) SetAge(age int) { p.Age = age }
Dans le code ci-dessus, les méthodes SetName et SetAge utilisent toutes deux le pointeur de structure Person comme récepteur. Cela signifie que nous devons appeler ces méthodes via un pointeur de type Person.
var p Person p.SetName("Tom") p.SetAge(20)
2.2 Masquage des types de structure
Nous pouvons utiliser des structures anonymes et des types d'interface pour masquer les types de structure afin d'obtenir l'effet d'encapsulation.
type Person struct { name string age int } type IPerson interface { SetName(name string) SetAge(age int) } func NewPerson() IPerson { p := &struct { *Person }{ &Person{}, } return p } func (p *Person) SetName(name string) { p.name = name } func (p *Person) SetAge(age int) { p.age = age }
Dans le code ci-dessus, nous définissons d'abord un type de structure Person, puis définissons un type d'interface IPerson, où IPerson contient les méthodes SetName et SetAge. Nous créons une structure anonyme dans la fonction NewPerson. Cette structure contient uniquement un pointeur vers le type Person et le renvoie éventuellement. De cette façon, lorsque le package externe appelle la fonction NewPerson, il obtient uniquement une valeur du type interface, sans connaître le type de structure spécifique qu'elle contient.
var p IPerson p = NewPerson() p.SetName("Tom") p.SetAge(20)
Grâce à l'encapsulation, nous pouvons garantir dans une certaine mesure la sécurité des données et l'efficacité des opérations. Lorsque nous devons modifier des données, il nous suffit de modifier l'implémentation interne du package, quel que soit l'impact sur les autres codes. Dans le même temps, l’encapsulation peut également rendre le code plus modulaire et plus facile à maintenir et à développer. Enfin, l’encapsulation permet également de réduire les dépendances et les couplages inutiles et d’améliorer la réutilisabilité du code.
L'encapsulation en langage Go est principalement réalisée grâce au contrôle de visibilité et à l'encapsulation de méthode. Grâce à l'encapsulation, nous pouvons améliorer la sécurité, la maintenabilité et la réutilisation du code. Bien entendu, dans les applications pratiques, nous devons également utiliser les techniques d’emballage de manière flexible en fonction de situations spécifiques.
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!