Bagaimana untuk Melaksanakan Sifat Dinamik dalam Go App Engine Datastore?

Susan Sarandon
Lepaskan: 2024-11-21 07:43:10
asal
227 orang telah melayarinya

How to Implement Dynamic Properties in the Go App Engine Datastore?

Sifat Dinamik dalam Kedai Data Enjin Aplikasi Go

Tidak seperti Enjin Aplikasi Python, Go tidak menawarkan mekanisme luar kotak untuk mencipta entiti dengan sifat dinamik, di mana atribut boleh ditetapkan pada masa jalan. Walau bagaimanapun, menggunakan antara muka PropertyLoadSaver, adalah mungkin untuk melaksanakan fungsi yang serupa.

Menggunakan PropertyList untuk Sifat Dinamik

Platform Enjin Aplikasi Go menyediakan jenis PropertyList, yang melaksanakan Antara muka PropertyLoadSaver dan membolehkan anda membina sifat secara dinamik pada menjimatkan masa. Pertimbangkan contoh berikut:

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

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

    // ...
}
Salin selepas log masuk

Dalam contoh ini, kami mencipta entiti bernama "DynEntity" dengan dua sifat dinamik, "masa" dan "e-mel."

Mencipta Jenis Tersuai untuk Sifat Dinamik

Dalam sesetengah kes, mungkin lebih baik untuk melaksanakan antara muka PropertyLoadSaver pada jenis tersuai daripada menggunakan PropertyList. Sebagai contoh, anda boleh melaksanakannya pada jenis peta:

package main

import (
    "context"

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

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() ([]datastore.Property, error) {
    var props []datastore.Property
    for k, v := range *d {
        props = append(props, datastore.Property{Name: k, Value: v})
    }
    return props, nil
}

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

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

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

    // ...
}
Salin selepas log masuk

Dengan jenis tersuai ini, anda boleh menggunakan sifat dinamik seperti mana-mana peta lain dalam Go, tetapi ia boleh disimpan dan diambil daripada stor data:

d["active"] = true
datastore.Put(ctx, key, &d)
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Sifat Dinamik dalam Go App Engine Datastore?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan