背景:
经过广泛的研究和测试,作者认为Go 中的嵌入方法无法访问“父”字段。这个问题探讨是否存在任何已知的异常或替代方法。
目标:
目标是为 Go 创建一个 Active Record 风格的 ORM,其中 CRUD 操作将嵌入到用户结构中。这将提高后端数据存储的可读性和抽象性。
示例:
提供的 Go 代码片段尝试访问“名称”字段Foo”结构来自嵌入的“Bar”结构的“Test”方法。但是,这会导致编译错误。
问题:
Go 中是否有任何机制允许嵌入式方法访问封闭结构的字段?
答案:
Go 不支持直接访问父字段在嵌入式方法中。 “Test”方法的接收者类型是“Bar”指针,该方法无法确定该指针是嵌入的还是独立的。
可能的解决方案:
一种解决方法包括向“Bar”结构添加一个 interface{} 成员,并要求将包含类型分配给该成员。然而,这不是一个优雅的解决方案,并且引入了额外的复杂性。
替代方法:
作者建议使用不同的 API 结构,而不是嵌入方法,例如“db.Save(user)”而不是“user.Save()”。这种方法可以更轻松地扩展到多个数据库并减少对全局状态的依赖。
以上是嵌入式 Go 方法可以访问封闭的结构体字段吗?的详细内容。更多信息请关注PHP中文网其他相关文章!