Maison > développement back-end > Golang > Comment puis-je définir dynamiquement les propriétés de structure dans Go à l'aide de Reflection ?

Comment puis-je définir dynamiquement les propriétés de structure dans Go à l'aide de Reflection ?

DDD
Libérer: 2024-12-02 04:24:14
original
135 Les gens l'ont consulté

How Can I Dynamically Set Struct Properties in Go Using Reflection?

Définition dynamique des propriétés d'une structure dans Go

Dans l'exemple de code donné, il est nécessaire de mettre à jour dynamiquement les propriétés d'une structure en fonction des valeurs lues à partir de un fichier. Au lieu de vérifier manuellement chaque nom de propriété et de le définir, envisagez de tirer parti du puissant package Reflect.

Le package Reflect permet d'accéder dynamiquement aux propriétés d'une structure et à leurs valeurs. Voici comment obtenir un paramétrage de propriété dynamique :

1. Créer une fonction d'assistance :

import (
    "fmt"
    "errors"
    "reflect"
)

// setField sets field of v with given name to given value.
func setField(v interface{}, name string, value string) error {
    // v must be a pointer to a struct
    rv := reflect.ValueOf(v)
    if rv.Kind() != reflect.Ptr || rv.Elem().Kind() != reflect.Struct {
        return errors.New("v must be pointer to struct")
    }

    // Dereference pointer
    rv = rv.Elem()

    // Lookup field by name
    fv := rv.FieldByName(name)
    if !fv.IsValid() {
        return fmt.Errorf("not a field name: %s", name)
    }

    // Field must be exported
    if !fv.CanSet() {
        return fmt.Errorf("cannot set field %s", name)
    }

    // We expect a string field
    if fv.Kind() != reflect.String {
        return fmt.Errorf("%s is not a string field", name)
    }

    // Set the value
    fv.SetString(value)
    return nil
}
Copier après la connexion

2. Utilisation :

var config SshConfig

...

err := setField(&config, split[0], strings.Join(split[1:], " "))
if err != nil {
    // handle error
}
Copier après la connexion

Ce paramètre de propriété dynamique vous permet de mettre facilement à jour les propriétés de structure sans coder en dur les noms de propriété.

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