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
Patricia Arquetteoriginal
2024-12-02 05:33:14626parcourir

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

}

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{}
}

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{}
}

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 {
    // ...
}

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!

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