Sifat Dinamik dalam Kedai Data Enjin Aplikasi Go
Tidak seperti Enjin Aplikasi Python, Go tidak menawarkan mekanisme luar kotak untuk mencipta entiti dengan sifat dinamik, di mana atribut boleh ditetapkan pada masa jalan. Walau bagaimanapun, menggunakan antara muka PropertyLoadSaver, adalah mungkin untuk melaksanakan fungsi yang serupa.
Menggunakan PropertyList untuk Sifat Dinamik
Platform Enjin Aplikasi Go menyediakan jenis PropertyList, yang melaksanakan Antara muka PropertyLoadSaver dan membolehkan anda membina sifat secara dinamik pada menjimatkan masa. Pertimbangkan contoh berikut:
package main import ( "context" "time" "google.golang.org/appengine/datastore" ) func main() { ctx := context.Background() props := datastore.PropertyList{ datastore.Property{Name: "time", Value: time.Now()}, datastore.Property{Name: "email", Value: "example@example.com"}, } k := datastore.NewIncompleteKey(ctx, "DynEntity", nil) key, err := datastore.Put(ctx, k, &props) if err != nil { // Handle error } // ... }
Dalam contoh ini, kami mencipta entiti bernama "DynEntity" dengan dua sifat dinamik, "masa" dan "e-mel."
Mencipta Jenis Tersuai untuk Sifat Dinamik
Dalam sesetengah kes, mungkin lebih baik untuk melaksanakan antara muka PropertyLoadSaver pada jenis tersuai daripada menggunakan PropertyList. Sebagai contoh, anda boleh melaksanakannya pada jenis peta:
package main import ( "context" "google.golang.org/appengine/datastore" ) type DynEnt map[string]interface{} func (d *DynEnt) Load(props []datastore.Property) error { for _, p := range props { (*d)[p.Name] = p.Value } return nil } func (d *DynEnt) Save() ([]datastore.Property, error) { var props []datastore.Property for k, v := range *d { props = append(props, datastore.Property{Name: k, Value: v}) } return props, nil } func main() { ctx := context.Background() d := DynEnt{"email": "example@example.com", "time": time.Now()} k := datastore.NewIncompleteKey(ctx, "DynEntity", nil) key, err := datastore.Put(ctx, k, &d) if err != nil { // Handle error } // ... }
Dengan jenis tersuai ini, anda boleh menggunakan sifat dinamik seperti mana-mana peta lain dalam Go, tetapi ia boleh disimpan dan diambil daripada stor data:
d["active"] = true datastore.Put(ctx, key, &d)
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Sifat Dinamik dalam Go App Engine Datastore?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!