Dalam Go, menukar peta kepada struct boleh dicapai dalam beberapa cara. Satu pendekatan melibatkan penggunaan pakej struktur peta, yang menawarkan penyahkodan peta yang cekap ke dalam struktur. Walau bagaimanapun, bagi mereka yang mencari kaedah yang lebih langsung, berikut ialah pelaksanaan tersuai:
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) }
Dalam pendekatan ini, fungsi SetField menetapkan nilai medan dengan namanya, memastikan medan itu wujud, boleh diakses, dan mempunyai jenis yang betul. Kaedah FillStruct struct kemudiannya berulang ke atas peta dan menggunakan SetField untuk mengisi medan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menukarkan Peta Go secara Terus kepada Struktur Tanpa Perpustakaan Luaran?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!