Maison > développement back-end > Golang > Les méthodes intégrées dans Go peuvent-elles accéder aux champs parents ?

Les méthodes intégrées dans Go peuvent-elles accéder aux champs parents ?

Mary-Kate Olsen
Libérer: 2024-12-06 06:06:14
original
747 Les gens l'ont consulté

Can Embedded Methods in Go Access Parent Fields?

Accéder aux champs parents à partir de méthodes intégrées dans Go : est-ce faisable ?

Dans Go, les méthodes intégrées permettent d'incorporer des types dans d'autres types, ce qui permet réutilisation du code et fourniture d'une interface plus simple. Cependant, une question courante se pose : les méthodes intégrées peuvent-elles accéder aux champs du type parent ?

Contexte :

Le mécanisme d'intégration de Go exploite la composition pour étendre les fonctionnalités d'un type sans héritage. Lorsqu'un type est intégré, ses champs et méthodes font partie du type d'intégration.

Objectif :

Le but de cette question concerne la création d'un ORM de style Active Record pour Go, où les méthodes sont intégrées à la structure utilisateur pour extraire le magasin de données opérations.

Exemple :

type Foo struct {
    *Bar
    Name string
}

func (s *Foo) Method() {
    // How to access "Name" field from this embedded method?
}
Copier après la connexion

Question :

Existe-t-il un moyen de créer des champs de niveau supérieur ( champs parents) accessibles à partir de méthodes intégrées comme s.Name ou call s.Method()?

Réponse :

Go ne prend pas en charge nativement l'accès aux champs parents à partir de méthodes intégrées. Le récepteur de la méthode intégrée est strictement lié au type intégré dans ce cas, *Bar. Par conséquent, accéder directement aux champs parents n'est pas possible.

Approches alternatives :

  • Solution basée sur l'interface : Ajouter une interface{} champ au type intégré, nécessitant des types conteneurs pour implémenter cette interface. Cette approche donne accès au type parent mais peut ajouter une complexité supplémentaire.
  • Structure de l'API modifiée : Envisagez de structurer l'API en tant que db.Save(user) plutôt que user.Save(). Cette approche s'aligne sur l'utilisation idiomatique des appels de fonction par Go et gère plusieurs bases de données avec élégance.

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