在Python 的App Engine 中,Expando 模型無需事先聲明即可將屬性動態分配給實體。本文探討如何使用 Google App Engine 資料儲存在 Go 中實現類似的功能。
在 Go 中定義動態實體的關鍵是 PropertyLoadSaver 介面。透過實現此接口,您可以在節省時間的情況下動態建構實體的屬性。
Go App Engine 平台提供 PropertyList 類型,該類型是 Property 實例的列表,並實作 PropertyLoadSaver 介面。透過利用 PropertyList,您可以建立動態實體,而無需自己實作介面。
props := datastore.PropertyList{ {Name: "time", Value: time.Now()}, {Name: "email", Value: "johndoe@example.com"}, }
要將此清單儲存為實體,您可以使用:
key, err := datastore.Put(c, k, &props)
為了獲得更大的彈性,您可以在自己的自訂類型上實作PropertyLoadSaver 接口,例如地圖。
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 }
透過此自訂實現,您現在可以輕鬆載入和儲存動態實體:
d := DynEnt{"email": "johndoe@example.com", "time": time.Now()} key, err := datastore.Put(c, k, &d)
此方法可讓您完全控制動態實體的屬性定義.
以上是如何在 Go 的 Google App Engine 資料儲存中建立動態實體?的詳細內容。更多資訊請關注PHP中文網其他相關文章!