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

Bagaimana untuk Melaksanakan Sifat Dinamik dalam Go App Engine Datastore?

Susan Sarandon
Susan Sarandonasal
2024-11-21 07:43:10228semak imbas

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
    }

    // ...
}

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
    }

    // ...
}

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)

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!

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