Passer des valeurs nulles en tant qu'interfaces via la réflexion
Réfléchir sur les interfaces présente le défi de transmettre efficacement des valeurs nulles. Considérez la fonction suivante :
func f(e error) { if e == nil { fmt.Println("YEY! NIL") // Aim for this } else { fmt.Println("NOT NIL :(") } }
Si vous tentez de transmettre une valeur nulle à la fonction par réflexion à l'aide du code ci-dessous, cela entraînera une panique :
nilArg := reflect.Zero(reflect.TypeOf((error)(nil)))
Don' Ne désespérez pas ! Pour contourner le problème, utilisez l'expression réflexion.TypeOf((*error)(nil)).Elem() pour obtenir le reflet.Type pour l'erreur d'interface. Cette astuce consiste à transmettre une valeur non-interface à réflexion.TypeOf() et à utiliser réflexion.Elem() pour dériver le type souhaité.
Pour la construction nilArg, utilisez ce qui suit :
nilArg := reflect.Zero(reflect.TypeOf((*error)(nil)).Elem())
Profitez d'un exemple de terrain de jeu fonctionnel pour consolider votre compréhension.
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!