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 时,它只会给我一个内存指针错误?
我已尝试使用帐户控制器删除指针,但我仍然遇到内存指针问题。那么我做错了什么?
谢谢,
解决方案
注意结构的结构
type TestController struct {
Account *AccountController
}
帐户是一个指针。它被初始化为nil
,所以如果你从不将它设置为指向某个东西,它将永远是 nil,当你尝试像这样调用它的方法时,你会得到一个 nil 指针取消引用错误
// c *TestController
c.Account.ActiveAccountID()
如何/何时设置它取决于您的用例。
此外,根据您的用例,您可以将其从指针更改为嵌入式结构
type TestController struct {
Account AccountController
}
这样它总是在结构内部,但如果你从其他地方分配它,它将被复制。根据您的用例,这可能是不可取的。
推荐阅读
- sdk - 使用汇总转换后看不到 jsdoc 方法建议
- javascript - 使用 ChartJs 超出了最大堆栈调用大小
- powershell - PowerShell 脚本和 Windows 性能监视器出现问题
- autodesk-forge - 对单个 OSS Bucket 中项目数量或大小的任何限制
- html - 无法使用 selenium 单击链接并出现错误
- function - 未来
' 不是类型 'Function? - amazon-web-services - 使用 aws lambda 时日志组不存在错误
- html - 使用 flex 右侧的徽标中心和菜单图标
- apache-kafka - 从特定时间戳开始流式传输 Kafka
- fluentlenium - Webdriver 实例在扩展 FluentTestNg 的测试类的测试方法后退出