Bagaimanakah Anda Boleh Mengatasi Kaedah Struktur Terbenam di Golang?

Patricia Arquette
Lepaskan: 2024-10-27 08:55:30
asal
797 orang telah melayarinya

How Can You Override Embedded Struct Methods in 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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!