首頁  >  文章  >  後端開發  >  如何在 Go 的 Google App Engine 資料儲存中實現動態屬性?

如何在 Go 的 Google App Engine 資料儲存中實現動態屬性?

Barbara Streisand
Barbara Streisand原創
2024-11-23 22:02:11394瀏覽

How to Implement Dynamic Properties in Go's Google App Engine Datastore?

在Google App Engine 資料儲存上的Go 中實作動態屬性

在Python 的App Engine 中,Expando 模型提供了將動態屬性指派給實體的便利,而無需預先聲明。我們如何在 Go 中複製這個功能?

實作動態屬性

Go 中實作動態屬性的關鍵是 PropertyLoadSaver 介面。它使實體能夠在保存之前動態構造屬性。

幸運的是,AppEngine 平台提供了 PropertyList 類型,它實作了 PropertyLoadSaver 介面。使用 PropertyList,您只需將動態屬性新增至清單即可輕鬆新增動態屬性。

使用動態屬性保存實體

讓我們深入研究一個範例:

import (
    "context"
    "time"

    datastore "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@domain.com"},
    }

    k := datastore.NewIncompleteKey(ctx, "DynEntity", nil)
    key, err := datastore.Put(ctx, k, &props)
    if err != nil {
        // Handle the error
    }
    // ...
}

此程式碼建立一個名為「DynEntity」的實體,具有兩個動態屬性:「時間」和「電子郵件。」

對動態實體使用自訂類型

如果您需要對動態實體進行更多控制,可以在自訂類型上實現PropertyLoadSaver 介面。例如,讓我們定義一個包裝地圖的自訂 DynEnt 類型:

type DynEnt map[string]interface{}

func (d *DynEnt) Load(props []datastore.Property) error {
    // ... Your implementation
}

func (d *DynEnt) Save() (props []datastore.Property, err error) {
    // ... Your implementation
}

現在,您可以如下使用 DynEnt:

import (
    "context"
    "time"

    datastore "google.golang.org/appengine/datastore"
)

func main() {
    ctx := context.Background()

    d := DynEnt{"email": "example@domain.com", "time": time.Now()}

    k := datastore.NewIncompleteKey(ctx, "DynEntity", nil)
    key, err := datastore.Put(ctx, k, &d)
    if err != nil {
        // Handle the error
    }
    // ...
}

以上是如何在 Go 的 Google App Engine 資料儲存中實現動態屬性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn