首页 >后端开发 >Golang >嵌入式 Go 方法可以访问封闭的结构体字段吗?

嵌入式 Go 方法可以访问封闭的结构体字段吗?

Patricia Arquette
Patricia Arquette原创
2024-12-16 21:34:20242浏览

Can Embedded Go Methods Access Enclosing Struct Fields?

嵌入式方法可以访问“父”字段吗?

背景:

经过广泛的研究和测试,作者认为Go 中的嵌入方法无法访问“父”字段。这个问题探讨是否存在任何已知的异常或替代方法。

目标:

目标是为 Go 创建一个 Active Record 风格的 ORM,其中 CRUD 操作将嵌入到用户结构中。这将提高后端数据存储的可读性和抽象性。

示例:

提供的 Go 代码片段尝试访问“名称”字段Foo”结构来自嵌入的“Bar”结构的“Test”方法。但是,这会导致编译错误。

问题:

Go 中是否有任何机制允许嵌入式方法访问封闭结构的字段?

答案:

Go 不支持直接访问父字段在嵌入式方法中。 “Test”方法的接收者类型是“Bar”指针,该方法无法确定该指针是嵌入的还是独立的。

可能的解决方案:

一种解决方法包括向“Bar”结构添加一个 interface{} 成员,并要求将包含类型分配给该成员。然而,这不是一个优雅的解决方案,并且引入了额外的复杂性。

替代方法:

作者建议使用不同的 API 结构,而不是嵌入方法,例如“db.Save(user)”而不是“user.Save()”。这种方法可以更轻松地扩展到多个数据库并减少对全局状态的依赖。

以上是嵌入式 Go 方法可以访问封闭的结构体字段吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn