Maison > développement back-end > Golang > Pourquoi ne puis-je pas appeler des méthodes sur un type nommé dans Go, et comment l'intégration peut-elle résoudre ce problème ?

Pourquoi ne puis-je pas appeler des méthodes sur un type nommé dans Go, et comment l'intégration peut-elle résoudre ce problème ?

DDD
Libérer: 2024-12-14 16:00:19
original
384 Les gens l'ont consulté

Why Can't I Call Methods on a Named Type in Go, and How Can Embedding Solve This?

Appel de méthodes sur des types nommés

Dans Go, les types nommés sont de nouveaux types de données créés à partir de ceux existants. Cela peut être utile pour ajouter des méthodes personnalisées au type sous-jacent, comme dans le cas de la désorganisation des données JSON. Cependant, lorsque le type nommé est créé de la manière indiquée ci-dessous, il perd la possibilité d'appeler les méthodes du type sous-jacent :

type StartTime time.Time
Copier après la connexion

Par exemple, tenter d'appeler la méthode Date() sur myStartTime entraîne une erreur : myStartTime.Date non défini (tapez my_package.StartTime n'a pas de champ ni de méthode Date).

Solution : Embracing Embeddings

Pour résoudre ce problème et conserver les méthodes d'origine du type sous-jacent, on peut utiliser l'incorporation. En intégrant le type sous-jacent, le type nommé hérite de toutes ses méthodes et champs. Ce processus est illustré ci-dessous :

type StartTime struct {
    time.Time
}
Copier après la connexion

Dans ce scénario, toutes les méthodes et tous les champs de time.Time sont « promus » et deviennent accessibles via le type nommé. Par conséquent, appeler Date() sur s, une variable de type StartTime, ne génère plus d'erreur.

Exemple de démonstration :

type StartTime struct {
    time.Time
}

func main() {
    s := StartTime{time.Now()}
    fmt.Println(s.Date())
}
Copier après la connexion

Ce code donne ce qui suit résultat :

2009 November 10
Copier après la connexion

En utilisant l'intégration, vous pouvez facilement étendre les capacités des types existants tout en conservant leur original fonctionnalité.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal