首页 > 解决方案 > 访问另一个结构上的函数

问题描述

将 Go 1.11.x 与 echo 框架一起使用。

我有以下结构和功能

type AccountController struct {
  ....
}

func (c *AccountController) ActiveAccountID() int {
  ....
  return 5
}

现在我想ActiveAccountID从另一个结构访问,我就是这样做的,

type TestController struct {
   Account *AccountController
}

func (c *TestController) AddData(ec echo.Context) error {
  ....
  id := c.Account.ActiveAccountID()     
  ....
}

但是当我打印/使用 id var 时,它只会给我一个内存指针错误?

我已尝试使用帐户控制器删除指针,但我仍然遇到内存指针问题。那么我做错了什么?

谢谢,

标签: go

解决方案


注意结构的结构

type TestController struct {
   Account *AccountController
}

帐户是一个指针。它被初始化为nil,所以如果你从不将它设置为指向某个东西,它将永远是 nil,当你尝试像这样调用它的方法时,你会得到一个 nil 指针取消引用错误

// c *TestController
c.Account.ActiveAccountID()

如何/何时设置它取决于您的用例。

此外,根据您的用例,您可以将其从指针更改为嵌入式结构

type TestController struct {
   Account AccountController
}

这样它总是在结构内部,但如果你从其他地方分配它,它将被复制。根据您的用例,这可能是不可取的。


推荐阅读