从嵌入方法访问父字段
背景
当使用嵌入方法来简化时面向对象编程,出现一个问题:这些方法能否访问父类的字段对象?
目标
目标是为 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。
替代方法
如果必须访问父字段,则可以解决方案包括:
以上是Go中的嵌入方法可以访问父对象字段吗?的详细内容。更多信息请关注PHP中文网其他相关文章!