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

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

DDD
DDD原创
2024-12-06 08:02:11177浏览

Can Embedded Go Methods Access Parent Struct Fields?

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

在 Go 中,嵌入式方法是代码重用和组织的强大机制。但是,出现了一个常见问题:嵌入式方法可以直接访问其父结构体的字段吗?

背景

对于上下文,假设您正在创建一个 Active Record - Go 的风格 ORM,其中常见的 CRUD 方法嵌入在用户结构中以提高可读性和抽象性。这将允许您编写 user.Save() 而不是 data.Save(user)。

示例

考虑以下代码片段:

重新审视问题

问题问题在于是否有办法使顶级字段可以通过嵌入式方法访问。在上面的示例中,Test 方法嵌入在 Bar 中,并尝试从父 Foo 结构体访问 Name 字段。

Answer

不幸的是,Go 不提供嵌入式方法访问其父结构体字段的任何直接机制。 Test方法的接收者是一个指向Bar的指针,Go没有办法判断它是否嵌入。

可能的解决方案

实现对于此功能,一个潜在的解决方法是向 Bar 结构添加一个 interface{} 成员,要求实现它的类型将该成员设置为包含类型。该成员的初始化可以由调用者负责,也可以通过 ORM 方法处理。然而,这种方法引入了额外的复杂性和潜在的维护问题。

替代视角

或者,考虑将 API 构造为 db.Save(user) 可能不会的可能性正如看起来那样有害。这种方法提供了一种支持多个数据库的简单方法,并避免依赖全局状态。

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

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