Maison > développement back-end > Golang > Comment puis-je effectuer des assertions de type sur une valeur de retour « reflect.TypeOf() » dans Go ?

Comment puis-je effectuer des assertions de type sur une valeur de retour « reflect.TypeOf() » dans Go ?

Susan Sarandon
Libérer: 2024-12-23 06:45:10
original
227 Les gens l'ont consulté

How Can I Perform Type Assertions on a `reflect.TypeOf()` Return Value in Go?

Assertion de type à l'aide de Reflection dans Go

Dans Go, les assertions de type fournissent un mécanisme pour vérifier le type d'une valeur d'interface{} et convertir à un type spécifique s'il correspond. Cependant, vous pouvez parfois rencontrer des situations dans lesquelles vous devez affirmer un type renvoyé par Reflect.TypeOf() dans un type spécifique.

Problème : les assertions nécessitent un type, pas un type

Dans votre exemple, vous tentez d'affirmer un Type sur un type en utilisant la ligne suivante :

item2 := i.(reflect.TypeOf(i))  // reflect.TypeOf(i) is not a type
Copier après la connexion

Ici, item2 ne sera pas valide car réfléchissant.TypeOf(i) renvoie un *reflect.Type, qui n'est pas un type en soi. Les assertions de type attendent un type, pas un descripteur de type.

Solution : Utiliser Type Switch

Une approche pour gérer cela consiste à utiliser un commutateur de type sur l'interface{ } valeur :

switch i.(type) {
case *reflect.Type:
    // Code to handle reflect.Type here
}
Copier après la connexion

Cela vous permet d'effectuer des actions spécifiques en fonction du type réel de l'interface{} value.

Approche alternative : analyse par réflexion

Si vous devez affirmer des types spécifiques à partir d'une interface{}, vous pouvez utiliser la réflexion pour analyser les champs de la valeur :

s := reflect.ValueOf(i)
for i := 0; i < s.NumField(); i++ {
    switch s.Field(i).Interface().(type) {
    case int:
        // Code to handle integer field here
    }
}
Copier après la connexion

Cette approche vous permet d'effectuer des vérifications de type sur des champs individuels au sein de l'interface{} value.

Conclusion :

Les assertions de type utilisant Reflect.TypeOf() dans Go nécessitent un type spécifique, pas un descripteur de type. Pour gérer de tels scénarios, vous pouvez utiliser des commutateurs de type ou une analyse par réflexion pour déterminer le type réel de la valeur de l'interface {}.

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