Maison > développement back-end > Golang > Comment obtenir un retour de type dynamique en Go ?

Comment obtenir un retour de type dynamique en Go ?

Patricia Arquette
Libérer: 2024-12-02 05:33:14
original
621 Les gens l'ont consulté

How to Achieve Dynamic Type Return in Go?

Comment gérer le retour de type dynamique dans Golang ?

Scénario :

Dans le développement de Golang Revel, du code répétitif apparaît en raison à des types de retour de données similaires impliquant le type struct. Considérez les fonctions suivantes :

func (c Helper) Brands() []*models.Brand {

    // Query rethinkdb and populate the Brand model
    var brands []*models.Brand
    rows.All(&brands)

    return brands

}

func (c Helper) BlogPosts() []*models.Post {

    // Query rethinkdb and populate the Post model
    var posts []*models.Post
    rows.All(&posts)

    return posts

}
Copier après la connexion

Dans les deux cas, le type de retour est le même (*[]struct). Pour éviter les duplications, une approche de type de retour dynamique est proposée :

func (c Helper) ReturnModels(modelName string) []*interface{} {

    // Query rethinkdb with modelName and return []*interface{}
}
Copier après la connexion

Questions :

  • Le retour de type dynamique est-il possible ?
  • Comment mettre en œuvre il ?

Réponse :

Oui, le retour de type dynamique est réalisable. La fonction doit renvoyer interface{} plutôt que []*interface{}. Voici comment cela peut être implémenté :

func (c Helper) ReturnModels(modelName string) interface{} {

    // Query rethinkdb with modelName and return interface{}
}
Copier après la connexion

Pour utiliser la valeur renvoyée, des commutateurs de type ou des assertions de type sont utilisés pour la restituer à son type d'origine :

Exemple :

if brands, ok := ReturnModels("brands").([]Brand); ok {
    // ...
}

if posts, ok := ReturnModels("posts").([]Post); ok {
    // ...
}
Copier après la connexion

En mettant en œuvre cette approche, la duplication de code peut être considérablement réduite en utilisant une seule fonction d'assistance pour les données récupération.

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