代码之家  ›  专栏  ›  技术社区  ›  C0ol_Cod3r

访问另一个结构上的函数

go
  •  -3
  • C0ol_Cod3r  · 技术社区  · 7 年前

    使用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变量时,它只会给我一个内存指针错误?

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

    谢谢,

    1 回复  |  直到 7 年前
        1
  •  1
  •   user10753492    7 年前

    注意结构的结构

    type TestController struct {
       Account *AccountController
    }
    

    帐户是指针。它的首字母缩写为 nil ,因此,如果您从未将其设置为指向某个对象,它将始终为零,并且当您尝试像这样对其调用方法时,将得到一个零指针取消引用错误。

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

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

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

    type TestController struct {
       Account AccountController
    }
    

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