Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Anda Boleh Mengatasi Kaedah Struktur Terbenam di Golang?
Mengatasi Kaedah Struktur Terbenam dalam Golang
Di Golang, apabila struct membenamkan struct lain (dirujuk sebagai benam), medan struct terbenam dan kaedah menjadi boleh diakses terus kepada struct pembenaman. Walau bagaimanapun, jika struct benam mentakrifkan semula kaedah daripada struct terbenam, ia boleh mengatasi kaedah asal.
Pertimbangkan kod berikut:
<code class="go">type Base struct { val int } func (b *Base) Set(i int) { b.val = i } type Sub struct { Base changed bool }</code>
Kami telah membenamkan Base ke Sub. Sekarang, jika kami cuba mengakses kaedah Set Base daripada Sub, ia akan disembunyikan oleh kaedah Set Sub sendiri:
<code class="go">func t16() { s := &Sub{} // This calls Base's Set method s.Base.Set(1) // This causes an error, as s.Set hides Base's Set s.Set(10) }</code>
Untuk mengatasi tingkah laku ini, kami boleh mentakrifkan semula kaedah Set Sub untuk memanggil kaedah Set Base secara eksplisit:
<code class="go">func (b *Sub) Set(i int) { b.Base.Set(i) b.changed = true }</code>
Kini, apabila kami memanggil s.Set(), ia akan menggunakan kaedah Set Base sambil masih membenarkan kami menjejaki perubahan dalam Sub.
<code class="go">func t16() { s := &Sub{} // Calls Sub's overridden Set method s.Set(10) fmt.Printf("%+v\n", s) // Output: {Base:{val:10} changed:true} }</code>
Kaedah ini membolehkan anda untuk mengatasi kaedah struct terbenam sambil mengekalkan akses kepada kaedah asal melalui medan struct terbenam.
Atas ialah kandungan terperinci Bagaimanakah Anda Boleh Mengatasi Kaedah Struktur Terbenam di Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!