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
Linda Hamiltonoriginal
2024-12-28 22:51:12574parcourir

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

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
}

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"]))

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!

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