Dalam stor data Google App Engine, anda mungkin menghadapi senario di mana anda perlu mentakrifkan sifat untuk entiti secara dinamik. Artikel ini meneroka teknik yang serupa dengan Model Expando Python untuk mencapai pengendalian sifat dinamik dalam Go.
Kunci untuk mencipta sifat dinamik terletak pada antara muka PropertyLoadSaver. Dengan melaksanakan antara muka ini, anda boleh membina sifat entiti secara dinamik pada menjimatkan masa.
Dengan mudah, platform Go AppEngine menyediakan jenis PropertyList, iaitu sekeping objek Harta. dan juga melaksanakan PropertyLoadSaver. Untuk mencipta model Expando dalam Go, hanya gunakan jenis PropertyList. Anda boleh menambah sifat yang diingini padanya dan ini akan disimpan sebagai sebahagian daripada entiti.
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@email.com"}, } k := datastore.NewIncompleteKey(ctx, "DynEntity", nil) key, err := datastore.Put(ctx, k, &props) if err != nil { // Handle error } c.Infof("%v", key) }
Dalam contoh ini, entiti bernama "DynEntity" disimpan dengan dua sifat dinamik: "masa" dan "e-mel."
Anda juga boleh melaksanakan antara muka PropertyLoadSaver dengan tersuai jenis, seperti peta. Coretan kod berikut menunjukkan cara membuat jenis DynEnt yang membalut peta:
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() (props []datastore.Property, err error) { for k, v := range *d { props = append(props, datastore.Property{Name: k, Value: v}) } return }
Jenis tersuai ini boleh digunakan untuk memuatkan dan menyimpan entiti secara dinamik:
d := DynEnt{"email": "example@email.com", "time": time.Now()} k := datastore.NewIncompleteKey(ctx, "DynEntity", nil) key, err := datastore.Put(ctx, k, &d) if err != nil { // Handle error } c.Infof("%v", key)
Pendekatan ini menyediakan cara yang fleksibel untuk menambahkan sifat dinamik pada entiti dalam stor data Google App Engine.
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Sifat Dinamik dalam Google App Engine\'s Go Datastore?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!