go - 访问另一个结构上的函数

标签 go

将 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 时,它只是给我一个内存指针错误?

我已经尝试过帐户 Controller 删除指针,但我仍然遇到内存指针问题。那我做错了什么?

谢谢,

最佳答案

注意结构的结构

type TestController struct {
   Account *AccountController
}

账户是一个指针。它被初始化为 nil,所以如果你从未将它设置为指向某物,它将始终为 nil,并且当你尝试像这样在其上调用方法时,你将得到一个 nil 指针取消引用错误

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

设置方式/时间取决于您的用例。

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

type TestController struct {
   Account AccountController
}

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

关于go - 访问另一个结构上的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54260147/

相关文章:

python - 如何在没有WINWORD的情况下解析.doc文档?

database - 如何编写与数据库无关的函数以使其更易于单元测试

go - websocket 消息可以被故意拆分吗?

go - Go中限制并发的简单方法

go - 在 Go 模板中对 Alertmanager 电子邮件模板进行排序

go - 如何在不修改堆栈的情况下将表的内容转储到堆栈中?

mongodb - 使用 mgo 存储嵌套结构

go - 管道多个命令然后写入文件

GoLang 和 MySQL 数据库

ssl - 带有 Apache2 SNI/主机名错误的 Golang ReverseProxy