Maison > développement back-end > Golang > Les fonctions Go peuvent-elles renvoyer dynamiquement différents types de structure à l'aide de « interface{}  ?

Les fonctions Go peuvent-elles renvoyer dynamiquement différents types de structure à l'aide de « interface{}  ?

Linda Hamilton
Libérer: 2024-12-28 22:51:12
original
562 Les gens l'ont consulté

Can Go Functions Dynamically Return Different Struct Types Using `interface{}`?

Comment renvoyer dynamiquement des types de structure dans Go ?

Dans votre application Revel, vous avez rencontré une redondance de code causée par différentes fonctions renvoyant des types de données similaires. Au lieu de créer plusieurs fonctions d'assistance pour chaque modèle, vous envisagez une solution dynamique qui renvoie les types d'interface{}. Cette question examine la faisabilité de cette approche.

Est-ce possible ?

Oui, il est possible de renvoyer dynamiquement des types de structures dans Go, mais cela nécessite un examen attentif d'interface{} et tapez l'assertion.

Signature de fonction

Au lieu de []*interface{}, vous devez déclarer votre fonction pour renvoyer une interface{}. Cela permet à la fonction de renvoyer n'importe quel type, y compris les structures.

func (c Helper) ReturnModels(modelName string) interface{}
Copier après la connexion

Exemple

Considérez l'exemple suivant :

type Post struct {
    Author  string
    Content string
}

type Brand struct {
    Name string
}

var database map[string]interface{} // Simulates a dynamic data source

func ReturnModels(modelName string) interface{} {
    return database[modelName] // Retrieve data from hypothetical database
}
Copier après la connexion

Utilisation

Vous peut utiliser des commutateurs de type ou des assertions de type pour restituer la valeur de retour à son type d'origine.

type switcher func(interface{}) interface{}
var result switcher

switch modelName := database["myModel"].(type) {
    case Brand:
        result = func(v interface{}) interface{} {
            return v.(Brand)
        }
    case Post:
        result = func(v interface{}) interface{} {
            return v.(Post)
        }
}
fmt.Println(result(database["myModel"]))
Copier après la connexion

Dans Dans cet exemple, l'instruction switch évalue le type des données extraites de la base de données. En fonction du type, la fonction de résultat est affectée à une fonction de conversion spécifique, qui est ensuite invoquée.

Conclusion

Le retour dynamique des types de structure dans Go à l'aide de l'interface{} est réalisable mais nécessite une manipulation minutieuse . Les assertions de type peuvent être utilisées pour garantir que le type correct est converti. Reportez-vous à l'exemple et à la documentation liés pour plus de conseils.

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