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 ?

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 ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-31 04:49:02624parcourir

Can Properties struct methods be inherited within the Node struct without embedding Properties in 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 :

  • Si S contient un champ anonyme T, les ensembles de méthodes de S et *S incluent tous deux méthodes promues avec le récepteur T.
  • Si S contient un champ anonyme T, les ensembles de méthodes de S et S incluent tous deux des méthodes promues avec le récepteur T ou *T."

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!

Déclaration:
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