Google app engine 按id获取实体
我正在使用gorilla mux进行我的路线,我传递了一个id 使用该Id如何从数据存储中获取实体Google app engine 按id获取实体,google-app-engine,go,Google App Engine,Go,我正在使用gorilla mux进行我的路线,我传递了一个id 使用该Id如何从数据存储中获取实体 param := mux.Vars(r) c := appengine.NewContext(r) item := []Item{} pr, err := datastore.NewQuery("Item").Filter("ID = ", param["id"]).GetAll(c, &item) 在这里,我被卡住了,我尝试使用过滤器,但它不起作用 下一步我必须做什么?您不能说是否对实
param := mux.Vars(r)
c := appengine.NewContext(r)
item := []Item{}
pr, err := datastore.NewQuery("Item").Filter("ID = ", param["id"]).GetAll(c, &item)
在这里,我被卡住了,我尝试使用过滤器,但它不起作用
下一步我必须做什么?您不能说是否对实体使用整数或字符串ID。我假设整数,因为它需要更多的代码。首先,创建一个密钥:
n, err := strconv.ParseInt(param["id"], 10, 64)
if err != nil {
// handle error
}
key := datastore.NewKey(c, "Item", "", n, nil)
现在您有了密钥,可以获取实体:
var item Item
if err := datastore.Get(c, key, &item); err != nil {
// handle error
}
查询实体比查询实体更有效。如果您确实希望按id进行查询,请参阅应用程序引擎文档中的。您没有说明是否使用整数或字符串id作为实体。我假设整数,因为它需要更多的代码。首先,创建一个密钥:
n, err := strconv.ParseInt(param["id"], 10, 64)
if err != nil {
// handle error
}
key := datastore.NewKey(c, "Item", "", n, nil)
现在您有了密钥,可以获取实体:
var item Item
if err := datastore.Get(c, key, &item); err != nil {
// handle error
}
查询实体比查询实体更有效。如果您确实希望按id进行查询,请参阅App Engine文档中的。如果您有id,则无需使用查询。一种更快、更便宜的方法是创建一个键并直接从数据存储中检索该实体
如果您有id,则不需要使用查询。一种更快、更便宜的方法是创建一个键并直接从数据存储中检索该实体
key:=datastore.NewKey(c,“Item”,“”,n,defaultItemList(c))
我使用了这个,但是我得到了datastore:无效的实体类型
传递给datastore.get的指针值是多少?您没有生成足够的源代码,无法让其他人确认您没有犯中提到的错误。ErrInvalidIdentityType记录在中,因此您的代码必须在数据存储中传递一些意外的目标值。Get
。例如,如果您完成了项:=[]项{}
,并且您正试图调用数据存储。Get(c,key,item)
,则肯定会失败:项
不是结构指针。您需要执行item:=item{}
然后执行datastore.Get(c,key,&item)
应该执行一些有效的操作。key:=datastore.NewKey(c,item,“”,n,defaultItemList(c))
我使用了它,但是我得到了datastore:无效的实体类型
传递给datastore.Get的指针的值是多少?您没有生成足够的源代码,无法让其他人确认您没有犯中提到的错误。ErrInvalidIdentityType记录在中,因此您的代码必须在数据存储中传递一些意外的目标值。Get
。例如,如果您完成了项:=[]项{}
,并且您正试图调用数据存储。Get(c,key,item)
,则肯定会失败:项
不是结构指针。您需要执行item:=item{}
然后执行datastore.Get(c,key,&item)
应该执行一些有效的操作。您可能会对以前使用SQL之类的数据建模语言的经验感到困惑。数据存储键与SQL主键列不同,因为数据存储键与实体的属性完全不同。查询应该只讨论实体属性。相比之下,SQL主键列仍然是列。如果您有数据存储键,请使用datastore.Get
或datastore.GetMulti
函数。不需要查询。您可能会对以前使用SQL之类的数据建模语言的经验感到困惑。数据存储键与SQL主键列不同,因为数据存储键与实体的属性完全不同。查询应该只讨论实体属性。相比之下,SQL主键列仍然是列。如果您有数据存储键,请使用datastore.Get
或datastore.GetMulti
函数。无需查询。