Maison > développement back-end > Golang > Comment vérifier les types personnalisés à l'aide de la réflexion dans Golang ?

Comment vérifier les types personnalisés à l'aide de la réflexion dans Golang ?

WBOY
Libérer: 2024-06-01 10:35:56
original
477 Les gens l'ont consulté

Utilisez la réflexion pour inspecter les types personnalisés dans Go : importez le package "reflect". Utilisez Reflect.ValueOf() pour obtenir la valeur d'un type. Utilisez réfléchissant.TypeOf() pour obtenir le reflet.Type du type. Utilisez NumField() et Field() pour obtenir des champs. Utilisez NumMethod() et Method() pour obtenir des méthodes publiques. Utilisez FieldByName() pour obtenir la valeur du champ. Utilisez Call() pour appeler des méthodes publiques.

如何在 Golang 中使用反射来检查自定义类型?

Comment utiliser la réflexion pour inspecter les types personnalisés dans Golang

La réflexion est une fonctionnalité puissante de la bibliothèque standard Golang qui permet aux programmes d'inspecter et de manipuler des types de données arbitraires au moment de l'exécution. Grâce à la réflexion, vous pouvez inspecter les valeurs, les méthodes et les champs d'un type personnalisé, et même créer et modifier le type lui-même.

Bases de Reflection

La première étape pour utiliser la réflexion est de référencer le package reflect : reflect 包:

import "reflect"
Copier après la connexion

类型的值可以通过 reflect.ValueOf() 函数获取:

v := reflect.ValueOf(yourValue)
Copier après la connexion

reflect.Type 类型表示一个 Go 类型。你可以使用 reflect.TypeOf() 函数获取一个类型的 reflect.Type

typ := reflect.TypeOf(YourType{})
Copier après la connexion

检查自定义类型

获取字段

使用 NumField()Field() 方法可以获取类型的字段:

for i := 0; i < typ.NumField(); i++ {
  fmt.Println(typ.Field(i).Name)
}
Copier après la connexion

获取方法

使用 NumMethod()Method() 方法可以获取类型的公共方法:

for i := 0; i < typ.NumMethod(); i++ {
  fmt.Println(typ.Method(i).Name)
}
Copier après la connexion

检查类型值

获取字段值

使用 FieldByName() 方法可以获取类型的字段值:

value := v.FieldByName("FieldName").Interface()
Copier après la connexion

调用方法

使用 Call()

result := v.MethodByName("MethodName").Call([]reflect.Value{reflect.ValueOf(arg1), reflect.ValueOf(arg2)})
Copier après la connexion

La valeur de type peut être obtenue via reflect.ValueOf()</ fonction code> : <p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:go;toolbar:false;'>type MyType struct { Name string Age int } myType := MyType{ Name: &quot;John Doe&quot;, Age: 30, } // 检查类型元信息 fmt.Println(&quot;Type:&quot;, reflect.TypeOf(myType)) // 检查名称字段 fmt.Println(&quot;Name Field:&quot;, reflect.ValueOf(myType).FieldByName(&quot;Name&quot;).String()) // 调用 ToString 方法 result := reflect.ValueOf(myType).MethodByName(&quot;ToString&quot;).Call([]reflect.Value{}) fmt.Println(&quot;ToString Result:&quot;, string(result[0].Bytes()))</pre><div class="contentsignin">Copier après la connexion</div></div><strong>Le type <code>reflect.Type représente un type Go. Vous pouvez utiliser la fonction reflect.TypeOf() pour obtenir le reflect.Type d'un type : rrreee

Vérifiez les types personnalisés

🎜Obtenir les champs🎜🎜🎜 Utilisez les méthodes NumField() et Field() pour obtenir les champs du type : 🎜rrreee🎜🎜Obtenez la méthode🎜🎜🎜Utilisez NumMethod() et <code la m>Method() peut obtenir la méthode publique du type : 🎜rrreee🎜🎜Vérifiez la valeur du type🎜🎜🎜🎜Obtenez la valeur du champ🎜🎜🎜Utilisez le FieldByName () pour obtenir le champ de type Valeur : 🎜rrreee🎜🎜Méthode d'appel🎜🎜🎜Utilisez la méthode Call() pour appeler la méthode publique de type : 🎜rrreee🎜 🎜Cas pratique🎜🎜🎜Ce qui suit est un moyen simple d'utiliser la réflexion pour vérifier un type personnalisé Exemple : 🎜rrreee🎜Cet exemple montre comment obtenir des méta-informations d'un type, accéder aux valeurs de champ et appeler des méthodes. 🎜

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!

Étiquettes associées:
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal