Maison > développement back-end > Golang > Comment puis-je déterminer de manière fiable l'implémentation de l'interface à l'aide de « reflect.Type » de Go ?

Comment puis-je déterminer de manière fiable l'implémentation de l'interface à l'aide de « reflect.Type » de Go ?

Barbara Streisand
Libérer: 2024-12-26 07:42:10
original
420 Les gens l'ont consulté

How Can I Reliably Determine Interface Implementation Using Go's `reflect.Type`?

Détermination de l'implémentation d'une interface à l'aide de Reflect.Type

Dans la programmation orientée objet, il est crucial de vérifier si un type implémente une interface spécifique. Pour faire cela efficacement dans le package de réflexion de Go, une représentation reflet.Type de l'interface est requise. Cependant, obtenir ce type peut s'avérer difficile, en particulier lorsqu'il s'agit de types d'interface non initialisés tels qu'une erreur.

Considérez la tentative suivante, qui conduit à la panique :

var err error
fmt.Printf("%#v\n", reflect.TypeOf(err).Kind())
Copier après la connexion

Pour résoudre ce problème , la fonction reflect.TypeOf doit être appelée sur un pointeur vers la valeur de l'interface, et non sur la valeur elle-même. De plus, la méthode Elem() peut être utilisée pour obtenir le type sous-jacent du pointeur, qui représente le type d'interface :

var err error
t := reflect.TypeOf(&err).Elem()
Copier après la connexion

Alternativement, une solution sur une seule ligne peut être obtenue en utilisant l'assertion de type :

t := reflect.TypeOf((*error)(nil)).Elem()
Copier après la connexion

Maintenant, le reflet.Type obtenu peut être transmis à réflexion.Type.Implements() pour déterminer s'il implémente l'interface souhaitée.

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