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) }
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!