Comprendre la différence entre Reflect.ValueOf() et Value.Elem()
Reflect.ValueOf() sert de passerelle vers la réflexion , vous permettant d'obtenir un descripteur Reflect.Value pour les valeurs de non-réflexion comme les chaînes ou les entiers.
De l'autre D’une part, Value.Elem() fonctionne comme une méthode dans Reflect.Value. Il peut être utilisé pour récupérer la valeur (également un reflet.Value) référencée par la valeur encapsulée par le reflet.Value d'origine. Notez que réfléchissant.Indirect() peut également être utilisé à cette fin.
Pour passer de la réflexion à la non-réflexion, utilisez la méthode Value.Interface(), qui renvoie la valeur encapsulée sous forme d'interface simple{ }.
var i int = 3 var p *int = &i fmt.Println(p, i) // Output: 0x414020 3 v := reflect.ValueOf(p) fmt.Println(v.Interface()) // Output: 0x414020 v2 := v.Elem() fmt.Println(v2.Interface()) // Output: 3
Cas d'utilisation avancé : Value.Elem() pour les interfaces
Si Reflect.Value s'enroule une valeur d'interface, Value.Elem() peut également récupérer la valeur concrète au sein de cette interface.
var r io.Reader = os.Stdin v := reflect.ValueOf(r) fmt.Println(v.Type()) // Output: *os.File v2 := reflect.ValueOf(&r) fmt.Println(v2.Type()) // Output: *io.Reader fmt.Println(v2.Elem().Type()) // Output: io.Reader fmt.Println(v2.Elem().Elem().Type()) // Output: *os.File
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!