從嵌入方法訪問父字段
背景
使用嵌入方法來簡化時物件導向編程,出現一個問題:這些方法能否存取父類別的欄位物件?
目標
目標是為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中文網其他相關文章!