Fonction de conversion d'une structure en carte dans Golang
Question :
Comment peut-on Je convertis efficacement une structure en carte dans Golang, en utilisant les balises JSON comme clés où possible ?
Réponse :
Bibliothèque tierce :
Le package structs de Fatih fournit une solution simple et complète pour cela tâche :
func Map(object interface{}) map[string]interface{}
Utilisation :
package main import ( "fmt" "github.com/fatih/structs" ) type Server struct { Name string `json:"name"` ID int32 `json:"id"` Enabled bool `json:"enabled"` } func main() { s := &Server{ Name: "gopher", ID: 123456, Enabled: true, } m := structs.Map(s) fmt.Println(m) // Output: {"name":"gopher", "id":123456, "enabled":true} }
Caractéristiques :
Implémentation personnalisée :
Si une implémentation personnalisée est préférée, Reflect.Struct peut être utilisé :
func ConvertToMap(model interface{}) map[string]interface{} { // Get the reflect type and value of the model modelType := reflect.TypeOf(model) modelValue := reflect.ValueOf(model) if modelValue.Kind() == reflect.Ptr { modelValue = modelValue.Elem() } // Check if the model is a struct if modelType.Kind() != reflect.Struct { return nil } // Create a new map to store the key-value pairs ret := make(map[string]interface{}) // Iterate over the fields of the struct for i := 0; i < modelType.NumField(); i++ { // Get the field and its name field := modelType.Field(i) fieldName := field.Name // Check if the field has a JSON tag jsonTag := field.Tag.Get("json") if jsonTag != "" { fieldName = jsonTag } // Get the value of the field fieldValue := modelValue.Field(i) // Recursively convert nested structs switch fieldValue.Kind() { case reflect.Struct: ret[fieldName] = ConvertToMap(fieldValue.Interface()) default: ret[fieldName] = fieldValue.Interface() } } return ret }
Cependant, cela nécessite d'extraire manuellement les noms de champs et de convertir les noms imbriqués structures.
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!