Pointers 如何共享嵌入式结构指针

Pointers 如何共享嵌入式结构指针,pointers,struct,go,Pointers,Struct,Go,我有以下代码: 具有匿名字段的结构控制器 type controller struct { *base.Controller store *data } 如您所见,*base.Controller是匿名字段指针。 然后是由*base.Controller组成的第二个结构 type expiredError struct { *base.Controller local string } 我初始化了控制器结构,如下所示: c := &controller

我有以下代码:

具有匿名字段的结构控制器

type controller struct {
    *base.Controller
    store *data
}
如您所见,*base.Controller是匿名字段指针。 然后是由*base.Controller组成的第二个结构

type expiredError struct {
    *base.Controller
    local string
}
我初始化了控制器结构,如下所示:

c := &controller{base.New(rw, r, false, "controller/account"), nil}
c.Title = "Activate account"
c.serve()
控制器上的base.Controller使用base.New()函数初始化

现在我有了一些控制器方法,它们初始化expiredError结构,并且它应该共享base.controller到expiredError的base.controller的指针

func (rcv *controller) validate() error {

    ....

    // If time for activating account is expired
    if time.Now().Unix() > rcv.store.Expired {
        // Delete registered user from neo4j
        maccount.Delete(rcv.store.Email, rcv.Local)

        return &expiredError{base.Controller, rcv.Local}
    }

    return nil
}
我这里有一个编译器错误

type base.Controller is not an expression

您可以通过提及父类的实例来尝试引用匿名字段:

rcv.Controller
(因为匿名字段的“名称”与字段的类型相同)

请参见中的类似示例:

  • “”

只能通过类型名访问嵌入字段,类型名不能有选择器。只有
rcv.Controller
可以工作。@JimB确实可以。我已相应地编辑了答案。我应该知道,因为我昨天使用了一个类似的示例。
类型base.Controller不是一个表达式
,意味着您需要的是某个对象的实例,而不是类型。