gpt4 book ai didi

google-app-engine - 我将如何在 Go 中的 App Engine 上实现一对多?

转载 作者:IT老高 更新时间:2023-10-28 13:03:55 25 4
gpt4 key购买 nike

如何使用 Go 编程语言在 Google App Engine 上实现一对多?
例如,如果我有下面的结构,我将如何将许多投票的关联存储到一个评论?我会在 Comment 结构中使用一组键( slice )来投票,还是使用 Vote 结构中的一个键来投票?

type Comment struct {
Author string
Content string
Date datastore.Time
}

type Vote struct {
User string
Score int
}

最佳答案

当前版本的 Go AppEngine SDK 中允许的字段类型只有 as follows :

  • 有符号整数(int、int8、int16、int32 和 int64),
  • bool ,
  • 字符串,
  • float32 和 float64,
  • 其基础类型是上述预声明类型之一的任何类型,
  • *键,
  • appengine.BlobKey,
  • []字节(最长为 1 兆字节),
  • 上述任何一种 slice (长度最多为 100 个元素)。

鉴于此,似乎有两种方法可以做到这一点。一种是维护一个键 slice 来指向给定评论的投票。但是,对于任何相当受欢迎的评论,这可能会违反 100 个元素的限制。

另一种方法是在每个投票结构中存储一个指向评论的“指针”,如下所示:

type Vote struct {
User string
Score int
CommentKey *datastore.Key
}

type Comment struct {
Author string
Content string
Date datastore.Time
}

那么当你去查询它时,你需要分两步来做。首先,您会获得您感兴趣的评论(在这种情况下,只是恰好返回的第一个评论)。其次,您查询所有“指向”该评论的投票:

q := datastore.NewQuery("Comment").Limit(1)
comments := make([]Comment, 0, 1)
var err os.Error
var keys []*datastore.Key
if keys, err = q.GetAll(c, &comments); err != nil {
// handle the error
}

comment := comments[0]
vq := datastore.NewQuery("Vote").Filter("CommentKey=", keys[0])

votes := make([]Vote, 0, 10)
if _, err := vq.GetAll(c, &votes); err != nil {
// handle the error
}

关于google-app-engine - 我将如何在 Go 中的 App Engine 上实现一对多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6125345/

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