Maison > développement back-end > Golang > A quoi sert Golang Reflect

A quoi sert Golang Reflect

PHPz
Libérer: 2023-04-25 14:33:23
original
538 Les gens l'ont consulté

Golang est un langage de programmation populaire, efficace, concis et fiable. Il dispose d'un mécanisme de réflexion intégré qui permet au code de recevoir des informations sur la structure de l'objet au moment de l'exécution. Ce mécanisme de réflexion rend l'utilisation de Golang plus pratique.

Le mécanisme de réflexion fait référence à un mécanisme d'information qui peut faire fonctionner dynamiquement des objets pendant l'exécution du programme. Grâce à la réflexion, un programme peut obtenir des informations d'exécution, notamment des valeurs d'objet, des types et des méthodes, sans que le programmeur ait à communiquer explicitement ces informations au programme. Ces informations peuvent être utilisées pour analyser des données, désérialiser des objets, injecter des dépendances et implémenter des mécanismes de traitement de programme tels que ORM, DI et AOP.

Le package de réflexion du langage Go est implémenté dans Reflect. Il contient deux types principaux : Type et Valeur. Type stocke des informations sur le type de données et Value stocke des informations sur la valeur des données. Les principales étapes de l'utilisation du package Reflect incluent la définition de types, la création de valeurs et la manipulation de ces valeurs à l'aide de méthodes de réflexion.

Définir le type : En langage Go, le mot-clé pour définir le type est type. Si vous avez besoin d'imbriquer ou de traiter des types, vous pouvez utiliser struct.

Créer une valeur : Dans le langage Go, le mot-clé pour créer une valeur est make. Lorsque vous utilisez le mécanisme de réflexion, vous devez utiliser le type interface{} pour transmettre tout type de valeur. Ce type peut être converti en n'importe quel type.Après avoir reçu ce type, utilisez reflect.ValueOf(v) pour le convertir en une valeur réflectable.

Utilisez des méthodes de réflexion pour exploiter ces valeurs : dans le langage Go, vous pouvez utiliser des méthodes de réflexion pour obtenir des informations sur les valeurs, modifier des valeurs, obtenir des champs de structure et d'autres opérations. Grâce à la méthode de réflexion, les données peuvent être modifiées dynamiquement pour améliorer l'évolutivité des applications.

Jetons ensuite un coup d'œil à quelques exemples spécifiques :

  1. Obtenir/modifier une valeur

Vous pouvez utiliser Reflect.ValueOf(v) pour obtenir un objet de valeur. Cet objet de valeur représente la valeur réelle et les informations de type. Vous pouvez utiliser certaines méthodes pour opérer sur cet objet, telles que get et set.

package main

import (

"fmt"
"reflect"
Copier après la connexion
Copier après la connexion
Copier après la connexion

)

func main() {

i := 1
iv := reflect.ValueOf(i)
fmt.Printf("%#v\n", iv)

iv.SetInt(2)
fmt.Printf("%#v\n", iv)
fmt.Println(i)
Copier après la connexion

}

Sortie :

reflect.ValueOf(1)
reflect.ValueOf(2)
2

  1. Obtenir/modifier Champs de structure

La structure est un type de données composé de plusieurs champs. Le mécanisme de réflexion peut obtenir et modifier les champs de la structure, améliorant ainsi la flexibilité de l'application.

package main

import (

"fmt"
"reflect"
Copier après la connexion
Copier après la connexion
Copier après la connexion

)

type person struct {

Name string
Age  int
Copier après la connexion

}

func main() {

p := person{Name: "Alice", Age: 18}

st := reflect.ValueOf(&p).Elem()
f1 := st.FieldByName("Name")
f2 := st.FieldByName("Age")

fmt.Printf("field1: %#v, field2: %#v\n", f1, f2)

f1.SetString("Bob")
f2.SetInt(20)

fmt.Println(p)
Copier après la connexion

}

Sortie :

field1 reflect.Value{typ:reflect.Type De (""), ptr:(uint8)(0x10d7f2c)}, field2 : reflex.Value{typ:reflect.TypeOf(0), ptr:(int)(0x10d7f2c)}
{Bob 20}

  1. dynamique Méthodes d'appel

En langage Go, les structures sont accessibles via des méthodes. Grâce au mécanisme de réflexion, nous pouvons appeler dynamiquement des méthodes au moment de l'exécution.

package main

import (

"fmt"
"reflect"
Copier après la connexion
Copier après la connexion
Copier après la connexion

)

type Printer struct {
}

func (p Printer) Print(s string) {

fmt.Println(s)
Copier après la connexion

}

func main() {

p := Printer{}

method := reflect.ValueOf(p).MethodByName("Print")
args := []reflect.Value{reflect.ValueOf("Hello World")}
method.Call(args)
Copier après la connexion

}

Résultat :

Hello World

Résumé

Cet article présente brièvement l'utilisation du mécanisme de réflexion de Golang, couvrant les opérations courantes telles que l'obtention/la modification de valeurs, l'obtention/la modification de champs de structure et l'appel dynamique de méthodes. Le mécanisme de réflexion rend les applications plus flexibles, évolutives et fiables. Cependant, lors de l'utilisation du mécanisme de réflexion, des problèmes tels que les performances et la conversion de type doivent être traités avec soin afin de ne pas affecter l'efficacité et la maintenabilité de l'application.

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