Невозможно вставить динамические свойства в хранилище данных движка приложений Google. - PullRequest
2 голосов
/ 03 мая 2019

пытаюсь с этого поста работать Как получить динамические свойства в хранилище данных движка приложений Google

Невозможно вставить данные в хранилище данных, он только создает идентификатор

import (
    "log"
    "net/http"
    "time"

    "github.com/julienschmidt/httprouter"
    "google.golang.org/appengine"
    "google.golang.org/appengine/datastore"
)

type DynEnt map[string]interface{}

func (d *DynEnt) Load(props []datastore.Property) error {
    // Note: you might want to clear current values from the map or create a new map
    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 nil, nil
}

//GetAccountHandler is to
func GetAccountHandler(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {

    c := appengine.NewContext(r)

    d := DynEnt{"email": "me@myhost.com", "time": time.Now()}
    log.Println("d=>", d)
    log.Println("&d=>", &d)
    k := datastore.NewIncompleteKey(c, "DynEntity", nil)
    key, err := datastore.Put(c, k, &d)
    log.Fatalf("%v %v", key, err)

}

1 Ответ

2 голосов
/ 03 мая 2019

Произошла опечатка в моем исходном ответе , возвращаемое значение в конце Save() было ошибкой копирования / вставки (из версии канала).Правильная версия:

func (d *DynEnt) Save() (props []datastore.Property, err error) {
    for k, v := range *d {
        props = append(props, datastore.Property{Name: k, Value: v})
    }
    return
}

Обратите внимание, что после return не указаны значения, поскольку используются именованные параметры результата.Указание nil, nil не вернет срез, встроенный в Save().

Также вы вызываете log.Fatalf() в конце вашего обработчика, который завершает ваше приложение.Попробуйте log.Printf() вместо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...