Maison > développement back-end > Golang > Comment puis-je accéder dynamiquement aux propriétés de structure et les mettre à jour dans Go ?

Comment puis-je accéder dynamiquement aux propriétés de structure et les mettre à jour dans Go ?

Patricia Arquette
Libérer: 2024-11-28 19:03:11
original
767 Les gens l'ont consulté

How Can I Dynamically Access and Update Struct Properties in Go?

Accès dynamique à une propriété de structure dans Golang

On peut rencontrer le besoin d'accéder et de mettre à jour dynamiquement les propriétés d'une structure dans Go. Ceci peut être réalisé à l'aide du package Reflect, qui permet la réflexion à l'exécution et la manipulation des types et des valeurs.

Pour définir un champ d'une structure par son nom, vous pouvez utiliser le package Reflect pour récupérer la valeur du champ et lui attribuer une nouvelle valeur. Voici une fonction qui implémente cette fonctionnalité :

// 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

Pour utiliser cette fonction, vous l'appelleriez ainsi :

var config SshConfig

...

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

Cette approche vous permet de définir dynamiquement la valeur d'une structure champ sans avoir besoin d'instructions if-else explicites ou de changement de casse.

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!

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