【问题标题】:Unable to insert dynamic properties in go on the google app engine datastore无法在谷歌应用引擎数据存储中插入动态属性
【发布时间】:2019-05-03 11:41:24
【问题描述】:

我正在尝试从这篇文章开始工作 How can I have dynamic properties in go on the google app engine datastore

无法将数据插入数据存储区,只是创建ID

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)

}

【问题讨论】:

    标签: dictionary google-app-engine go datastore


    【解决方案1】:

    my original answer 中有错字,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()

    【讨论】:

      猜你喜欢
      • 2021-09-15
      • 2014-10-21
      • 1970-01-01
      • 2013-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多