Bagaimana Mengendalikan Tandatangan Kaedah Sama Merentas Pakej Berbeza dalam Go?

Mary-Kate Olsen
Lepaskan: 2024-11-03 05:07:30
asal
507 orang telah melayarinya

How to Handle Identical Method Signatures Across Different Packages in Go?

Mengendalikan Antara Muka dengan Tanda Tangan Kaedah Yang Sama merentas Pakej Berbeza

Dalam Go, apabila berurusan dengan berbilang antara muka dengan tandatangan kaedah yang sama tetapi ditakrifkan dalam pakej berasingan, situasi mungkin timbul apabila jenis yang melaksanakan kedua-dua antara muka membawa kepada tingkah laku yang tidak dijangka.

Pertimbangkan kedua-dua antara muka ini (Doer) dan fungsi (FuncA dan FuncB) yang ditakrifkan dalam pakej yang berbeza:

<code class="go">// Package A
type Doer interface { Do() string }
func FuncA(doer Doer)

// Package B
type Doer interface { Do() string }
func FuncB(doer Doer)</code>
Salin selepas log masuk

Jika jenis C melaksanakan Doer daripada kedua-dua pakej dan pelaksanaannya berbeza:

<code class="go">// Package main
type C int
func (c C) Do() string { return "A-specific implementation" }

func main() {
    cA := C(0); A.FuncA(cA)
    cB := C(0); B.FuncB(cB) // Behavior differs due to varying `Do()` implementations
}</code>
Salin selepas log masuk

Untuk menangani isu ini, sistem jenis Go menekankan padanan mengikut nama dan ketekalan dalam jenis. Walaupun ia membenarkan objek untuk memenuhi berbilang antara muka, pelaksanaan kaedah dikongsi mesti mematuhi semua kontrak antara muka yang berkenaan.

Dalam senario di atas, penyelesaian melibatkan pelaksanaan jenis pembalut:

<code class="go">// Package main
type DoerA struct { C C }
func (d DoerA) Do() string { return "A-specific implementation" }
type DoerB struct { C C }
func (d DoerB) Do() string { return "B-specific implementation" }

func main() {
    cA := DoerA{C(0)}; A.FuncA(cA)
    cB := DoerB{C(0)}; B.FuncB(cB) // Correct behavior with separate implementations
}</code>
Salin selepas log masuk

Dengan mencipta pembungkus ini, anda boleh mengawal pelaksanaan Do() berdasarkan penggunaan antara muka yang dimaksudkan, memastikan ketekalan dalam konteks pakej masing-masing.

Atas ialah kandungan terperinci Bagaimana Mengendalikan Tandatangan Kaedah Sama Merentas Pakej Berbeza dalam Go?. 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!