Google app engine 指向切片的指针是否正确;关系“;与GAE数据存储一起使用?

Google app engine 指向切片的指针是否正确;关系“;与GAE数据存储一起使用?,google-app-engine,go,google-cloud-datastore,Google App Engine,Go,Google Cloud Datastore,根据App Engine文档,我可以做如下操作: type Team struct { Name string } type Player struct { Name string } // Save data first just for the test case teamA := datastore.NewIncompleteKey(c, "Team", nil) teamA, _ = datastore.Put(c, teamA, Team{"Team A"}) pl

根据App Engine文档,我可以做如下操作:

type Team struct {
    Name string
}

type Player struct {
    Name string
}

// Save data first just for the test case
teamA := datastore.NewIncompleteKey(c, "Team", nil)
teamA, _ = datastore.Put(c, teamA, Team{"Team A"})
playerA := datastore.NewIncompleteKey(c, "Player", teamA)
playerA, _ = datastore.Put(c, playerA, Player{"Player A"})
playerB := datastore.NewIncompleteKey(c, "Player", teamA)
playerB , _ = datastore.Put(c, playerB, Player{"Player B"})

// query data
q := datastore.NewQuery("Team").Filter("Name=", "Team A").Limit(1).KeysOnly()
teams, _ := q.GetAll(c, nil)
q = datastore.NewQuery("Player").Ancestor(teams[0])
var players []Player
q.GetAll(c, &players)
type Team struct {
    Name string
    Players *[]Player `datastore:-`
}

type Player {
    Name string
}

// Save data first just for the test case
teamA := datastore.NewIncompleteKey(c, "Team", nil)
teamA, _ = datastore.Put(c, teamA, Team{"Team A", nil})

/* Saving player data goes here */

// query data
q := datastore.NewQuery("Team").Filter("Name=", "Team A").Limit(1)
var teams []Team
teamKeys, _ := q.GetAll(c, teams)
q = datastore.NewQuery("Player").Ancestor(teamKeys[0])
q.GetAll(c, teams[0].Players)
然而。。。如果我想让团队包含一个指向玩家某个部分的指针,那么我会将它保存为nil,当我查询它时,我会分配它,有点像这样:

type Team struct {
    Name string
}

type Player struct {
    Name string
}

// Save data first just for the test case
teamA := datastore.NewIncompleteKey(c, "Team", nil)
teamA, _ = datastore.Put(c, teamA, Team{"Team A"})
playerA := datastore.NewIncompleteKey(c, "Player", teamA)
playerA, _ = datastore.Put(c, playerA, Player{"Player A"})
playerB := datastore.NewIncompleteKey(c, "Player", teamA)
playerB , _ = datastore.Put(c, playerB, Player{"Player B"})

// query data
q := datastore.NewQuery("Team").Filter("Name=", "Team A").Limit(1).KeysOnly()
teams, _ := q.GetAll(c, nil)
q = datastore.NewQuery("Player").Ancestor(teams[0])
var players []Player
q.GetAll(c, &players)
type Team struct {
    Name string
    Players *[]Player `datastore:-`
}

type Player {
    Name string
}

// Save data first just for the test case
teamA := datastore.NewIncompleteKey(c, "Team", nil)
teamA, _ = datastore.Put(c, teamA, Team{"Team A", nil})

/* Saving player data goes here */

// query data
q := datastore.NewQuery("Team").Filter("Name=", "Team A").Limit(1)
var teams []Team
teamKeys, _ := q.GetAll(c, teams)
q = datastore.NewQuery("Player").Ancestor(teamKeys[0])
q.GetAll(c, teams[0].Players)
这是模拟关系的好方法吗?
对于我的应用程序,树形结构将是完全适合我手指的戒指。

或者也许。。。您还有其他建议吗?

我认为指针不是数据存储的有效类型
从这里开始:

实体的内容是从区分大小写的字段名到 价值观有效值类型包括:

或者也许。。。你还有别的建议吗?
向播放机发送的片段可能有效(未经测试)

或者你应该在同一个URL中搜索。它就像是你选择将东西插入datasotre的内容和方式,而不是让它自动运行。

我实际上使用了PropertyLoadSaver,我有一个空的
[]Player
,带有
`datastore:-`
,还有另一个
*键的片段。然后我实现了PropertyLoadSaver,从
*键
播放器
加载到片中。。。我的意思是。。。我希望能够有一个nil值,而不是实际保存它,我忘了放
`datastore:-`
之类的东西(我已经更新了代码)我想你可能仍然想要[]*Palyer和PropertyLoadSaverAh是的,我试图暗示我没有使用指向切片的指针,只是一个切片,所以。。是 啊