Maison > développement back-end > Golang > Comment puis-je convertir directement une Go Map en une structure sans bibliothèques externes ?

Comment puis-je convertir directement une Go Map en une structure sans bibliothèques externes ?

Patricia Arquette
Libérer: 2024-12-27 21:58:13
original
345 Les gens l'ont consulté

How Can I Directly Convert a Go Map to a Struct Without External Libraries?

Conversion d'une carte en structure dans Go sans intermédiaires

Dans Go, la conversion d'une carte en structure peut être réalisée de plusieurs manières. Une approche consiste à utiliser le package mapstructure, qui offre un décodage efficace des cartes en structures. Cependant, pour ceux qui recherchent une méthode plus directe, voici une implémentation personnalisée :

import "reflect"

type MyStruct struct {
    Name string
    Age  int64
}

// SetField sets the value of a struct field by name.
func SetField(obj interface{}, name string, value interface{}) error {
    structValue := reflect.ValueOf(obj).Elem()
    field := structValue.FieldByName(name)

    if !field.IsValid() {
        return fmt.Errorf("No such field: %s in obj", name)
    }

    if !field.CanSet() {
        return fmt.Errorf("Cannot set %s field value", name)
    }

    val := reflect.ValueOf(value)
    if field.Type() != val.Type() {
        return errors.New("Provided value type didn't match obj field type")
    }

    field.Set(val)
    return nil
}

// FillStruct fills the struct fields with values from the map.
func (s *MyStruct) FillStruct(m map[string]interface{}) error {
    for k, v := range m {
        err := SetField(s, k, v)
        if err != nil {
            return err
        }
    }
    return nil
}

func main() {
    data := make(map[string]interface{})
    data["Name"] = "Tony"
    data["Age"] = int64(23)

    result := &MyStruct{}
    err := result.FillStruct(data)
    if err != nil {
        fmt.Println(err)
    }

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

Dans cette approche, la fonction SetField définit la valeur d'un champ par son nom, garantissant que le champ existe, est accessible, et a le type correct. La méthode FillStruct de la structure parcourt ensuite la carte et utilise SetField pour remplir les champs.

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