Maison > Article > développement back-end > Les méthodes de structure Properties peuvent-elles être héritées dans la structure Node sans intégrer de propriétés dans Go ?
Structs intégrés
Dans Go, les structures intégrées offrent un mécanisme permettant de réutiliser des méthodes entre les structures. Cependant, certaines limitations surviennent lorsque l'on tente d'hériter de méthodes sans intégration directe.
Enquête sur les méthodes alternatives
Un utilisateur pose la question : est-il possible d'hériter des méthodes de structure Properties dans la structure Node sans intégrer de propriétés ? L'exemple de code fourni montre des structures intégrées, ce qui soulève le problème de l'initialisation des propriétés dans Node.
Répondre à la clarification de la clé
L'objectif ultime de l'utilisateur est de définir Node comme un Structure de propriétés, éliminant le besoin d'initialisations dans Node. Le code souhaité ressemblerait à ce qui suit :
<code class="go">package main import "fmt" type Properties map[string]interface{} func (p Properties) GetString(key string) string { return p[key].(string) } type Nodes map[string]*Node type Node Properties func main() { allNodes := Nodes{"1": &Node{"test": "foo"}} singleNode := allNodes["1"] fmt.Println(singleNode.GetString("test")) }</code>
Comprendre le choix de conception de Go
Cependant, l'utilisateur rencontre une particularité de Go : l'intégration est la seule méthode de promotion des méthodes d'une structure à une autre. Bien qu'il semble logique qu'un nœud structuré en tant que propriétés expose les méthodes de propriétés, la syntaxe attribue à Node la disposition des propriétés, à l'exclusion des méthodes.
Examen de la spécification de Go
Référencement du Go spécification, l'instruction suivante clarifie la situation :
"L'ensemble de méthodes d'un type d'interface est son interface. L'ensemble de méthodes de tout autre type T se compose de toutes les méthodes déclarées avec le type de récepteur T."
Ainsi, GetString, ayant un type de propriétés récepteur, exclut Node.
Spécifications supplémentaires pour les champs anonymes
La spécification développe les champs anonymes (comme les propriétés dans Node ):
"Les méthodes promues sont incluses dans l'ensemble de méthodes de la structure comme suit :
Malheureusement, cela entraîne la déclaration forcée des propriétés dans chaque nœud.
Conclusion
En résumé, bien que les structures intégrées fournissent un moyen d'héritage de méthode, L'intégration directe est la seule approche disponible dans Go. Les spécifications interdisent le comportement souhaité sans intégration.
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!