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.
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)})
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: "John Doe",
Age: 30,
}
// 检查类型元信息
fmt.Println("Type:", reflect.TypeOf(myType))
// 检查名称字段
fmt.Println("Name Field:", reflect.ValueOf(myType).FieldByName("Name").String())
// 调用 ToString 方法
result := reflect.ValueOf(myType).MethodByName("ToString").Call([]reflect.Value{})
fmt.Println("ToString Result:", 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 : rrreeeVérifiez les types personnalisés
🎜Obtenir les champs🎜🎜🎜 Utilisez les méthodes NumField() etField()
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!