首页 > 后端开发 > Golang > Go中的嵌入方法可以访问父对象字段吗?

Go中的嵌入方法可以访问父对象字段吗?

Barbara Streisand
发布: 2024-12-06 18:36:21
原创
918 人浏览过

Can Embedded Methods in Go Access Parent Object Fields?

从嵌入方法访问父字段

背景

当使用嵌入方法来简化时面向对象编程,出现一个问题:这些方法能否访问父类的字段对象?

目标

目标是为 Go 创建一个模仿 Active Record 模式的 ORM,其中附加了 Save() 和 Delete() 等方法正在保存或删除的对象。这种方法简化了代码的可读性,并将其与底层数据存储解耦。

示例

下面的代码演示了 Foo 中的嵌入方法 (Test())类型:

package main

import (
    "fmt"
    "reflect"
)

func main() {
    test := Foo{Bar: &Bar{}, Name: "name"}
    test.Test()
}

type Foo struct {
    *Bar
    Name string
}

func (s *Foo) Method() {
    fmt.Println("Foo.Method()")
}

type Bar struct {
}

func (s *Bar) Test() {
    t := reflect.TypeOf(s)
    v := reflect.ValueOf(s)
    fmt.Printf("model: %+v %+v %+v\n", s, t, v)
    fmt.Println(s.Name)
    s.Method()
}
登录后复制

问题

嵌入方法(Test())可以访问父(Foo)对象的Name字段吗?

回答

不,Go 中没有直接的方法来实现嵌入式方法来访问其父对象的字段。 Test() 方法的接收者类型是 *Bar,而目标对象的类型是 Foo。

替代方法

如果必须访问父字段,则可以解决方案包括:

  • 在嵌入类型中添加一个interface{}字段,并将其设置为包含类型
  • 采用db.Save(user)的方式而不是user.Save(),这样可以提供更好的扩展性并降低全局状态问题的风险。

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板