Google app engine 在Go-on应用程序引擎中建模N对N关联

Google app engine 在Go-on应用程序引擎中建模N对N关联,google-app-engine,go,Google App Engine,Go,我正在尝试使用Google应用程序引擎在Go中编写一个Web应用程序,我有一个关于使用数据存储建模关系的问题 我知道在Python中,我可以使用db.referenceProperty()对关系进行建模。我似乎不知道如何使用Go API建立类似的关联 是否有人有幸做到这一点?您可以将密钥用作实体中的属性: 类似这样的事情(我不知道去吧,请容忍我): 可以将键用作实体中的属性: 类似这样的事情(我不知道去吧,请容忍我): 彼得,你肯定走对了路。我想我已经弄明白了。我还没有真正测试过这一点,但它在数

我正在尝试使用Google应用程序引擎在Go中编写一个Web应用程序,我有一个关于使用数据存储建模关系的问题

我知道在Python中,我可以使用db.referenceProperty()对关系进行建模。我似乎不知道如何使用Go API建立类似的关联


是否有人有幸做到这一点?

您可以将密钥用作实体中的属性:

类似这样的事情(我不知道去吧,请容忍我):


可以将键用作实体中的属性:

类似这样的事情(我不知道去吧,请容忍我):


彼得,你肯定走对了路。我想我已经弄明白了。我还没有真正测试过这一点,但它在数据存储查看器中似乎是正确的。我现在看到的是这样的(忽略示例中的错误检查):

类型Boss结构{
名称,Uuid字符串
}
类型Employee结构{
名称,Uuid字符串,
Boss*datastore.Key
}
boss:=&boss{
姓名:“尖头老板”,
Uuid:,
}
迪尔伯特:=&Employee{
姓名:“迪尔伯特”,
Uuid:,
老板:没有,
}
datastore.Put(上下文,datastore.NewIncompleteKey(上下文,“Boss”,nil),bossman)
query:=datastore.NewQuery(“Boss”).Filter(“Uuid=”,bossMan)
对于t:=query.Run(ctx);{
var雇员
key,err:=t.Next(&employee)
如果err==datastore.Done{
打破
}
如果错误!=零{
fmt.Fprintf(w,“错误%s”,错误)
}
dilbert.Boss=key
}
datastore.Put(上下文,datastore.NewIncompleteKey(上下文,“Employee”,nil),dilbert)

彼得,你肯定走对了方向。我想我已经弄明白了。我还没有真正测试过这一点,但它在数据存储查看器中似乎是正确的。我现在看到的是这样的(忽略示例中的错误检查):

类型Boss结构{
名称,Uuid字符串
}
类型Employee结构{
名称,Uuid字符串,
Boss*datastore.Key
}
boss:=&boss{
姓名:“尖头老板”,
Uuid:,
}
迪尔伯特:=&Employee{
姓名:“迪尔伯特”,
Uuid:,
老板:没有,
}
datastore.Put(上下文,datastore.NewIncompleteKey(上下文,“Boss”,nil),bossman)
query:=datastore.NewQuery(“Boss”).Filter(“Uuid=”,bossMan)
对于t:=query.Run(ctx);{
var雇员
key,err:=t.Next(&employee)
如果err==datastore.Done{
打破
}
如果错误!=零{
fmt.Fprintf(w,“错误%s”,错误)
}
dilbert.Boss=key
}
datastore.Put(上下文,datastore.NewIncompleteKey(上下文,“Employee”,nil),dilbert)
type Employee struct {
    Name     string
    Boss     *Key
}

employee := Employee{
    Name:     "John Doe",
    Boss:     key    // a key to some other entity
}
type Boss struct {
    Name, Uuid string
}

type Employee struct {
    Name, Uuid string,
    Boss *datastore.Key
}

boss := &Boss {
    Name:  "Pointy Haired Boss",
    Uuid:  <<some uuid>>,
}

dilbert := &Employee {
    Name: "Dilbert",
    Uuid: <<some uuid>>,
    boss: nil,
}

datastore.Put(context, datastore.NewIncompleteKey(context, "Boss", nil), bossman)
query := datastore.NewQuery("Boss").Filter("Uuid =", bossMan)
for t := query.Run(ctx); ; {
    var employee Employee
    key, err := t.Next(&employee)
    if err == datastore.Done {
        break
    }
    if err != nil {
        fmt.Fprintf(w, "Error %s", err)
    }
    dilbert.Boss = key
}
datastore.Put(context, datastore.NewIncompleteKey(context, "Employee", nil), dilbert)