Konvertieren von Karten in Strukturen in Go: Effiziente Ansätze
Das Füllen von Strukturen mit Daten aus Karten in Go kann eine häufige Aufgabe sein, und die Verwendung einer Eine zwischengeschaltete JSON-Konvertierung kann sich ineffizient anfühlen. Glücklicherweise gibt es effizientere Möglichkeiten, diese Transformation zu erreichen.
Ein sehr empfehlenswerter Ansatz ist die Nutzung des vielseitigen „mapstructure“-Pakets von Mitchell Hashimoto. Mit diesem Paket können Sie einfach Folgendes aufrufen:
import "github.com/mitchellh/mapstructure" mapstructure.Decode(myData, &result)
Diese elegante Syntax dekodiert die Map myData mit minimalem Aufwand in das Strukturergebnis.
Wenn Sie einen DIY-Ansatz bevorzugen, können Sie dies tun Folgen Sie der umfassenden Lösung, die im folgenden Codeausschnitt beschrieben wird:
func SetField(obj interface{}, name string, value interface{}) error { // Get a handle on the struct value and field structValue := reflect.ValueOf(obj).Elem() structFieldValue := structValue.FieldByName(name) // Check validity and permissions for the operation 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) } // Match field types for assignment structFieldType := structFieldValue.Type() val := reflect.ValueOf(value) if structFieldType != val.Type() { return errors.New("Provided value type didn't match obj field type") } // Update the field value within the struct instance structFieldValue.Set(val) return nil } type MyStruct struct { Name string Age int64 } func (s *MyStruct) FillStruct(m map[string]interface{}) error { // Iterate over map keys and values, setting corresponding struct fields 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) }
Dieser Code kümmert sich sorgfältig um Feldsuchen, Typprüfungen und Werte Aufgaben, um die Konvertierung von Karte zu Struktur zu erreichen.
Das obige ist der detaillierte Inhalt vonWie kann ich Karten in Go effizient in Strukturen konvertieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!