0Pricing
Go Academy · Leçon

reflect.Type et reflect.Value

TypeOf, ValueOf, Kind et Elem

reflect.Type et reflect.Value est une leçon Go Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Go Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Go Academy comprend 4 leçons au total.

Présentation du paquet reflect

Le paquet reflect permet aux programmes Go d’inspecter les types et les valeurs lors de l’exécution. Il constitue le fondement des bibliothèques d’encodage, des ORM et des infrastructures d’injection de dépendances.

reflect.TypeOf

reflect.TypeOf(x) renvoie le reflect.Type de la valeur de x :

t := reflect.TypeOf(42)
fmt.Println(t.Name())    // "int"
fmt.Println(t.Kind())    // "int"
fmt.Println(t.String())  // "int"

reflect.ValueOf

reflect.ValueOf(x) renvoie un reflect.Value contenant x. Vous pouvez lire la valeur à l’aide de méthodes propres à Kind :

v := reflect.ValueOf(42)
fmt.Println(v.Kind())    // "int"
fmt.Println(v.Int())     // 42

Type.Kind ou Type.Name

Kind est la catégorie Go sous-jacente (int, struct, ptr, slice, ...). Name est le nom de type déclaré ("MyStruct"). Les interfaces ont Kind == Interface, mais aucun Name.

Champs de structure

Inspectez les champs d’une structure avec Type.NumField() et Type.Field(i), qui renvoie un reflect.StructField :

t := reflect.TypeOf(User{})
for i := 0; i < t.NumField(); i++ {
    f := t.Field(i)
    fmt.Printf("Field: %s Type: %s Tag: %s\n", f.Name, f.Type, f.Tag.Get("json"))
}

Lecture des valeurs des champs d’une structure

Utilisez Value.FieldByName ou Value.Field(i) pour lire les valeurs des champs lors de l’exécution :

v := reflect.ValueOf(user)
nameField := v.FieldByName("Name")
fmt.Println(nameField.String()) // "Alice"

Définition des valeurs des champs d’une structure

Pour définir un champ, la valeur doit être adressable (transmise sous forme de pointeur) :

v := reflect.ValueOf(&user).Elem()
v.FieldByName("Name").SetString("Bob")

Indirection des pointeurs

Si une valeur est un pointeur, appelez v.Elem() pour obtenir la valeur pointée. Vérifiez d’abord v.Kind() == reflect.Ptr.

if v.Kind() == reflect.Ptr {
    v = v.Elem()
}

reflect.New

Créez une nouvelle valeur nulle d’un type et obtenez un pointeur vers celle-ci :

t := reflect.TypeOf(User{})
ptr := reflect.New(t) // *User
user := ptr.Interface().(*User)

Appel de méthodes

Appelez une méthode par son nom sur une valeur réfléchie :

v := reflect.ValueOf(user)
m := v.MethodByName("Greet")
results := m.Call(nil)
fmt.Println(results[0].String())

Performances

La réflexion est 5 à 10 fois plus lente que le code direct. Mettez en cache les recherches de reflect.Type et de reflect.Value en dehors des boucles critiques. Utilisez la génération de code lorsque les performances sont essentielles.

Vérification rapide

Quelle est la différence entre reflect.Type.Kind() et reflect.Type.Name() ?

Récapitulatif : reflect.Type et reflect.Value

Points clés :

  • reflect.TypeOf/ValueOf pour inspecter les types lors de l’exécution
  • Kind : catégorie sous-jacente ; Name : nom déclaré
  • Value.FieldByName + SetXxx pour manipuler les champs d’une structure
  • Transmettre un pointeur + appeler Elem() pour obtenir des valeurs modifiables

Questions Fréquemment Posées

La leçon « reflect.Type et reflect.Value » est-elle gratuite ?

Oui — le texte complet de « reflect.Type et reflect.Value » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Go Academy, passe à CoddyKit PRO. Le cours Go Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « reflect.Type et reflect.Value » ?

TypeOf, ValueOf, Kind et Elem Tu pratiques Go Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Go Academy ?

Aucune expérience préalable n'est requise. Go Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.

Combien de temps prend la leçon « reflect.Type et reflect.Value » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Go Academy ?

Oui. Chaque leçon Go Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. reflect.Type et reflect.Value
  2. Inspecter les champs et balises des structs
  3. Appels de fonctions dynamiques
  4. Réflexion pratique : sérialiseurs
← Retour à Go Academy