Maison >développement back-end >Golang >Comment Go peut-il obtenir des types de retour dynamiques à l'aide de génériques et d'assertions de type ?
Types de retour dynamiques dans Go : utilisation de génériques et d'assertions de type
Les types de retour dynamiques sont couramment utilisés dans les langages de programmation pour renvoyer des valeurs de différents types . Dans Go, cela n'est pas directement possible car les types de retour des fonctions sont corrigés. Cependant, il existe des solutions de contournement qui peuvent obtenir des fonctionnalités similaires.
Une approche consiste à utiliser un type de retour générique, tel que interface{}. Ce type peut contenir des valeurs de n'importe quel type, permettant à une fonction de renvoyer des valeurs de différents types. Cependant, cette approche nécessite que les assertions de type utilisent la valeur renvoyée en toute sécurité, car le compilateur ne peut pas déterminer le type réel au moment de la compilation.
func ReturnModels(modelName string) interface{} { // Get models from the database if modelName == "brands" { return []Brand{ {Name: "Gucci"}, {Name: "LV"}, } } else if modelName == "posts" { return []Post{ {Author: "J.K.R.", Content: "Whatever"}, } } return nil } func main() { result := ReturnModels("brands") if brands, ok := result.([]Brand); ok { fmt.Printf("List of Brands: %v\n", brands) } result = ReturnModels("posts") if posts, ok := result.([]Post); ok { fmt.Printf("List of Posts: %v", posts) } }
Dans cet exemple, la fonction ReturnModels renvoie une valeur d'interface{}. La fonction main effectue des assertions de type pour récupérer le type réel de la valeur renvoyée. Si l'assertion de type réussit, la valeur renvoyée peut être utilisée comme prévu.
Cette approche permet des types de retour dynamiques dans Go tout en maintenant la sécurité des types. Cependant, cela introduit une surcharge liée aux assertions de type et peut nécessiter une gestion supplémentaire des erreurs pour garantir la réussite de l'assertion de type.
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!