Structs intégrés et héritage de méthodes
Existe-t-il une alternative aux structures intégrées pour hériter des méthodes ?
Oui, il existe une manière alternative d'hériter des méthodes d'un type sans utiliser de structures intégrées. Cependant, cela nécessite une compréhension plus approfondie du système de types de Go.
Structs intégrés
Dans Go, l'intégration d'une structure vous permet d'accéder aux champs et aux méthodes de la structure intégrée. comme s'ils faisaient partie de la structure contenant. Il s'agit d'une fonctionnalité puissante qui peut être utilisée pour créer des héritages entre les types.
Le piège
Lorsque vous intégrez une structure, l'ensemble de méthodes de la structure intégrée n'est pas automatiquement promu dans la structure contenant. Pour promouvoir des méthodes, la structure intégrée doit être anonyme.
Promotion de méthode
La promotion de méthode est une fonctionnalité du langage qui permet d'accéder aux méthodes d'une structure intégrée anonyme comme si c'étaient des méthodes de la structure contenante. Ceci est réalisé en suivant ces règles :
Exemple
Considérez le code suivant :
<code class="go">type Props map[string]interface{} func (p Props) GetString(key string) string { return p[key].(string) } type Node struct { Props } func main() { node := Node{"test": "foo"} fmt.Println(node.GetString("test")) // Output: foo }</code>
Dans ce Par exemple, la structure Node intègre une structure anonyme de type Props. Cela permet à la méthode GetString de Props d'être promue vers Node.
Approche alternative
Une approche alternative sans intégration consiste à utiliser un récepteur de pointeur. En passant un pointeur vers la fonction récepteur, vous pouvez accéder aux champs et méthodes de la structure sous-jacente sans avoir à l'intégrer.
Exemple
Voici une implémentation alternative en utilisant un récepteur pointeur :
<code class="go">type Props map[string]interface{} func (p *Props) GetString(key string) string { return p[key].(string) } type Node struct { Props } func main() { node := &Node{Props{"test": "foo"}} fmt.Println(node.GetString("test")) // Output: foo }</code>
Dans cet exemple, nous utilisons un récepteur pointeur pour la méthode GetString. Cela nous permet d'accéder aux champs et aux méthodes de la structure Props sous-jacente sans avoir à l'intégrer.
Conclusion
Bien que les structures intégrées soient un outil puissant pour l'héritage, elles ne sont pas toujours le meilleur choix. Dans les cas où la promotion de la méthode n'est pas souhaitée ou nécessaire, l'utilisation d'un récepteur pointeur peut fournir une alternative plus flexible et plus performante.
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!