gpt4 book ai didi

google-app-engine - Google Go 不生成唯一标识符?

转载 作者:IT王子 更新时间:2023-10-29 00:54:43 26 4
gpt4 key购买 nike

我正在尝试持久化实体,并允许数据库生成 key 。不幸的是,我似乎无法从 API 中梳理出合成 ID……这就是我正在做的事情:

case "POST":
d,_ := ioutil.ReadAll( r.Body)
participant := new(Participant)
err := json.Unmarshal( d, &participant)
if err != nil {
serveError( c, w, err)
return
}

var key *datastore.Key;
if participant.ID == 0 {
// no id yet .. create an incomplete key and allow the db to create one.
key = datastore.NewIncompleteKey( c, "participant", parentKey)
} else {
// we have an id. use that to update
key = datastore.NewKey( c, "participant", "", participant.ID, parentKey)
}
// PERSIST!
putKey, e := datastore.Put( c, key, participant)
if e != nil {
serveError( c, w, e)
return
}

// Fetch back out of the database, presumably with my new ID
if e = datastore.Get( c, putKey, participant); e != nil {
serveError( c, w, e)
return
}

// send to the consumer
json,_ := json.Marshal( participant)
w.Write( json)

好吧,奇怪的是 ID 总是零!详细信息已保留,但我得到了多个值,这些值保留在同一个 ID 字段中。对于 grins,这是对象定义:

type Participant struct {
ID int64
LastName string
FirstName string
Birthdate string
Email string
Cell string
}

在执行 GET 操作之后,我会看到一个 ID 为零的实体列表(是的,我创建的实体,与创建它们的次数一样多)。

[
{"ID":0,"LastName":"Schmuck","FirstName":"Joe","Birthdate":"12-12-12","Email":"","Cell":""},
{"ID":0,"LastName":"Schmuck","FirstName":"Jane","Birthdate":"12-12-12","Email":"","Cell":""},
{"ID":0,"LastName":"Schmuck","FirstName":"Jane","Birthdate":"12-12-12","Email":"","Cell":""},
{"ID":0,"LastName":"Schmuck","FirstName":"Jane","Birthdate":"12-12-12","Email":"","Cell":""},
{"ID":0,"LastName":"Schmuck","FirstName":"Jane","Birthdate":"12-12-12","Email":"","Cell":""},
{"ID":0,"LastName":"Schmuck","FirstName":"Jane","Birthdate":"12-12-12","Email":"","Cell":""}
]

为了完整起见,我还尝试使用 ID 值为零的 NewKey(),但结果相同。关于 NewKey 的 API 文档说了一些关于(字符串)名称和 ID 都为零的内容,从而创建了一个不完整的 key ——我不确定如何使字符串为零,但 nil 不起作用。

一旦指向文档的正确部分,有人可以帮助我找出可能非常明显的内容。

最佳答案

我没有看到您在任何地方填充 ID 字段,所以它当然会是 0,因为这是该字段的零值。 AppEngine 在存储它时不会修改您的结构。当您 Put 结构时返回的新创建的 key 包含使用不完整 key 时生成的 IntId() 。我认为您的困惑是由于假设了文档从未说过的内容而引起的。也就是说,AppEngine 会为您自动填充存储数据中的 ID 字段。

因为在您的情况下,您希望结构的 ID 字段存储 key 中使用的 ID,您可能想要生成您自己的唯一 ID,以便在创建 key 而不是使用不完整的 key 时使用。

当文档说字符串可以为零时,它指的是字符串类型的零值,即空字符串“”。您可以在此处阅读有关零值的更多信息:http://golang.org/ref/spec#The_zero_value

关于google-app-engine - Google Go 不生成唯一标识符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14151976/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com