Maison >développement back-end >Golang >Comment récupérer le « reflect.Type » d'une interface dans Go ?

Comment récupérer le « reflect.Type » d'une interface dans Go ?

DDD
DDDoriginal
2024-12-24 04:45:10674parcourir

How to Retrieve the `reflect.Type` of an Interface in Go?

Récupérer le Reflect.Type d'une interface

Déterminer si un type implémente une interface via le package Reflect implique de transmettre un Reflect.Type à Reflect.Type.Implements(). Cet article explore le processus d'obtention de tels types.

Obtention du type d'une interface non initialisée

Tentative de récupération du type d'une interface d'erreur non initialisée (qui est une interface type) l'utilisation directe de reflex.TypeOf() entraînera une panique lors de la tentative d'accès à la méthode Kind() du type obtenu. Pour contourner ce problème, les approches suivantes peuvent être utilisées :

Approche 1 :

var err error
t := reflect.TypeOf(&err).Elem()

Cette approche consiste à obtenir le type d'un pointeur vers l'interface, et puis récupérer le type concret sous-jacent (élément) à l'aide d'Elem().

Approche 2 (One-Liner) :

t := reflect.TypeOf((*error)(nil)).Elem()

Cette approche exploite le fait qu'une valeur d'interface nulle peut être affirmée sur n'importe quel type d'interface. En créant un pointeur nul vers le type d'interface souhaité et en récupérant son type, vous pouvez directement obtenir le type concret sans avoir à prendre l'adresse de la variable.

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