Google app engine 指向切片的指针是否正确;关系“;与GAE数据存储一起使用?
根据App Engine文档,我可以做如下操作: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
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是的,我试图暗示我没有使用指向切片的指针,只是一个切片,所以。。是 啊