Heim >Backend-Entwicklung >Golang >Wie konvertiert man eine Go-Struktur mithilfe von JSON-Tags effizient in eine Karte?
Funktion zum Konvertieren einer Struktur in eine Karte in Golang
Frage:
Wie kann Ich konvertiere eine Struktur effizient in eine Karte in Golang und verwende dabei JSON-Tags als Schlüssel möglich?
Antwort:
Bibliothek von Drittanbietern:
Das Paket structs von Fatih bietet hierfür eine unkomplizierte und umfassende Lösung Aufgabe:
func Map(object interface{}) map[string]interface{}
Verwendung:
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} }
Funktionen:
Benutzerdefinierte Implementierung:
Wenn eine benutzerdefinierte Implementierung bevorzugt wird, kann „reflect.Struct“ verwendet werden :
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 }
Dies erfordert jedoch ein manuelles Extrahieren der Feldnamen und eine verschachtelte Konvertierung Strukturen.
Das obige ist der detaillierte Inhalt vonWie konvertiert man eine Go-Struktur mithilfe von JSON-Tags effizient in eine Karte?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!