Maison >développement back-end >Golang >Comment puis-je convertir efficacement une Go Map en une structure sans utiliser JSON ?
Dans Go, vous pouvez rencontrer des scénarios dans lesquels vous devez convertir une carte en structure. Bien que JSON puisse servir de méthode intermédiaire, ce n’est peut-être pas l’approche la plus efficace. Voici comment réaliser cette conversion :
Une alternative simple consiste à utiliser la puissante bibliothèque mapstructure de GitHub. En l'important, vous pouvez exploiter sa fonctionnalité Decode() comme suit :
import "github.com/mitchellh/mapstructure" mapstructure.Decode(myData, &result)
Pour une implémentation pratique, envisagez l'approche suivante :
package main import ( "fmt" "reflect" ) type MyStruct struct { Name string Age int64 } func SetField(obj interface{}, name string, value interface{}) error { structValue := reflect.ValueOf(obj).Elem() structFieldValue := structValue.FieldByName(name) if !structFieldValue.IsValid() { return fmt.Errorf("No such field: %s in obj", name) } if !structFieldValue.CanSet() { return fmt.Errorf("Cannot set %s field value", name) } structFieldType := structFieldValue.Type() val := reflect.ValueOf(value) if structFieldType != val.Type() { return errors.New("Provided value type didn't match obj field type") } structFieldValue.Set(val) return nil } 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() { myData := make(map[string]interface{}) myData["Name"] = "Tony" myData["Age"] = int64(23) result := &MyStruct{} err := result.FillStruct(myData) if err != nil { fmt.Println(err) } fmt.Println(result) }
En utilisant la réflexion et le Fonction personnalisée SetField(), ce code parcourt les entrées de la carte et définit les champs de structure correspondants, fournissant une solution polyvalente pour convertir des cartes en structures dans Go.
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!