Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Melaksanakan Sifat Dinamik dalam Google App Engine\'s Go Datastore?

Bagaimana untuk Melaksanakan Sifat Dinamik dalam Google App Engine\'s Go Datastore?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-26 05:57:10683semak imbas

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

Menambahkan Sifat Dinamik pada Entiti dalam Go

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.

Antara Muka Penjimat Beban Hartanah

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.

Jenis Senarai Hartanah

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."

Pelaksanaan Peta Asli

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn