Dans Golang, les valeurs nulles ne peuvent pas être directement attribuées aux types d'interface. En effet, nil représente l'absence de valeur, alors que les interfaces sont destinées à représenter des pointeurs vers des valeurs. Lorsqu'il tente de transmettre une valeur nulle à un argument d'interface, le programme vérifie si l'argument est nul et peut renvoyer une erreur ou se comporter de manière inattendue.
Pour contourner ce problème, la réflexion peut être utilisée pour créer une valeur nulle. valeur qui peut être transmise à un argument d’interface et réussir la vérification nulle. La réflexion permet un accès par programmation aux types et valeurs sous-jacents des variables.
Solution :
Utilisez l'expression Reflect.TypeOf((*error)(nil)).Elem () pour obtenir le reflet.Type pour l’erreur d’interface. Cette expression utilise une valeur non-interface, *error, pour obtenir le reflet.Type correct. Par la suite, Elem est appelé sur le résultat pour obtenir le reflet.Type d'erreur.
Pour créer le nilArg, utilisez l'expression suivante :
nilArg := reflect.Zero(reflect.TypeOf((*error)(nil)).Elem())
Cette expression crée une valeur nulle de type erreur. Le problème d'origine est survenu parce que reflex.TypeOf((error)(nil)) a renvoyé nil, car le type concret d'une valeur d'interface nulle est nul.
Exemple :
func main() { rf := reflect.ValueOf(f) nilArg := reflect.Zero(reflect.TypeOf((*error)(nil)).Elem()) rf.Call([]reflect.Value{nilArg}) }
Cette solution permet à la fonction f de recevoir la valeur nulle et de réussir la vérification == nil.
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!