Rumah >pembangunan bahagian belakang >Golang >Bagaimana Mengendalikan Tandatangan Kaedah Sama Merentas Pakej Berbeza dalam Go?

Bagaimana Mengendalikan Tandatangan Kaedah Sama Merentas Pakej Berbeza dalam Go?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-03 05:07:30618semak imbas

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>

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>

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>

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!

Kenyataan:
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