首頁  >  文章  >  後端開發  >  如何使用 Go 處理 Google App Engine (GAE) 資料儲存區中的巢狀結構?

如何使用 Go 處理 Google App Engine (GAE) 資料儲存區中的巢狀結構?

Linda Hamilton
Linda Hamilton原創
2024-10-27 02:20:03260瀏覽

How do I work with nested structs in the Google App Engine (GAE) Datastore using Go?

Go 中GAE 資料儲存中的巢狀結構

問題:

如何在Google App Engine 中使用嵌入套結構(GAE) 使用Go 時的資料儲存?

答案:

Go 中的資料儲存 API 不直接支援巢狀結構。不過,解決方案是利用 API 提供的 PropertyLoadSaver 介面。

實作:

  1. 依需求定義資料結構,包含巢狀結構.
  2. 為主結構實作PropertyLoadSaver 介面的Load 與Save方法。這些方法將負責序列化和反序列化嵌套結構。
  3. 使用 Key 物件上的 AddPropertyLoadSaver 方法為主結構註冊 PropertyLoadSaver 實作。

範例:

<code class="go">type Post struct {
    Field1 string
    Field2 string
    User   User
}

type User struct {
    UserField1 string
    UserField2 string
}

func (p Post) Load(ps []Property) error {
    for _, prop := range ps {
        switch prop.Name {
        case "Field1":
            p.Field1 = prop.Value.(string)
        case "Field2":
            p.Field2 = prop.Value.(string)
        case "User":
            if err := prop.Load(&p.User); err != nil {
                return err
            }
        }
    }

    return nil
}

func (p Post) Save() ([]Property, error) {
    props := []Property{
        {Name: "Field1", Value: p.Field1},
        {Name: "Field2", Value: p.Field2},
    }

    pLoad, err := appengine.Datastore().SaveStruct(p.User)
    if err != nil {
        return nil, err
    }

    props = append(props, pLoad...)

    return props, nil
}

// Usage
key := datastore.NewKey("Post", "someID", nil)

_, err := datastore.Put(ctx, key, &post)</code>

此實作允許您以結構化方式儲存和擷取巢狀結構,同時仍受益於Datastore 的過濾和查詢功能。

以上是如何使用 Go 處理 Google App Engine (GAE) 資料儲存區中的巢狀結構?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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