Maison  >  Article  >  développement back-end  >  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
WBOYoriginal
2024-06-01 10:35:56452parcourir

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"

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

v := reflect.ValueOf(yourValue)

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

typ := reflect.TypeOf(YourType{})

检查自定义类型

获取字段

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

for i := 0; i < typ.NumField(); i++ {
  fmt.Println(typ.Field(i).Name)
}

获取方法

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

for i := 0; i < typ.NumMethod(); i++ {
  fmt.Println(typ.Method(i).Name)
}

检查类型值

获取字段值

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

value := v.FieldByName("FieldName").Interface()

调用方法

使用 Call()

result := v.MethodByName("MethodName").Call([]reflect.Value{reflect.ValueOf(arg1), reflect.ValueOf(arg2)})

La valeur de type peut être obtenue via reflect.ValueOf() fonction code> : <p> <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><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!

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