Maison > développement back-end > Golang > le corps du texte

Comment la réflexion dans Go peut-elle gérer la transmission de valeurs nulles aux arguments d'interface ?

Barbara Streisand
Libérer: 2024-11-24 10:47:11
original
923 Les gens l'ont consulté

How Can Reflection in Go Handle Passing Nil Values to Interface Arguments?

Passer des valeurs nulles aux arguments d'interface via la réflexion dans Golang

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())
Copier après la connexion

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})
}
Copier après la connexion

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!

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