Mengakses Medan Induk daripada Kaedah Terbenam
Latar Belakang
Apabila kaedah terbenam digunakan untuk memudahkan pengaturcaraan berorientasikan objek, persoalan timbul: bolehkah kaedah ini mengakses medan induk objek?
Matlamat
Matlamatnya ialah untuk mencipta ORM untuk Go yang meniru corak Active Record, di mana kaedah seperti Save() dan Delete() dilampirkan pada objek yang disimpan atau dipadamkan. Pendekatan ini memudahkan kebolehbacaan kod dan memisahkannya daripada stor data asas.
Contoh
Kod di bawah menunjukkan kaedah terbenam (Test()) dalam Foo taip:
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() }
Soalan
Bolehkah kaedah terbenam (Test()) mengakses medan Nama objek induk (Foo)?
Jawapan
Tidak, tiada cara langsung dalam Pergi untuk kaedah terbenam untuk mengakses medan objek induknya. Jenis penerima kaedah Test() ialah *Bar, manakala objek sasaran adalah jenis Foo.
Pendekatan Alternatif
Jika mengakses medan induk adalah penting, mungkin penyelesaian termasuk:
Atas ialah kandungan terperinci Bolehkah Kaedah Terbenam dalam Go Mengakses Medan Objek Induk?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!