Rumah > pembangunan bahagian belakang > Golang > Mengapa Go Struct Tidak Melaksanakan Antara Muka jika Parameter Kaedah atau Jenis Pulangan Tidak Padan Sepenuhnya?

Mengapa Go Struct Tidak Melaksanakan Antara Muka jika Parameter Kaedah atau Jenis Pulangan Tidak Padan Sepenuhnya?

Barbara Streisand
Lepaskan: 2024-12-15 11:18:11
asal
792 orang telah melayarinya

Why Doesn't a Go Struct Implement an Interface if a Method's Parameter or Return Type Doesn't Fully Match?

Struct Tidak Melaksanakan Antara Muka Jika Ia Mempunyai Kaedah Yang Parameternya Melaksanakan Antara Muka

Dalam contoh ini, kita mempunyai dua antara muka, A dan B, dan dua struct, C dan D, yang melaksanakannya. Apabila cuba menghantar tika D kepada fungsi yang mengharapkan jenis yang melaksanakan B, ralat akan berlaku.

Memahami Pelaksanaan Antara Muka

Antaramuka mentakrifkan tandatangan kaedah yang mesti dipatuhi oleh jenis pelaksana. Sesuatu struct melaksanakan antara muka jika ia mempunyai kaedah dengan tandatangan yang sama seperti dalam antara muka.

Isu dengan Kaedah Sambung dalam D

Masalah timbul kerana kaedah Sambung dalam D mengembalikan penunjuk kepada C dan bukannya A. Menurut antara muka B, kaedah Sambung harus mengembalikan A. Ketakpadanan ini menghalang D daripada melaksanakan antara muka sepenuhnya B.

Membetulkan Pelaksanaan

Untuk membetulkan isu, jenis pemulangan Connect dalam D hendaklah ditukar agar sepadan dengan definisi antara muka:

type D struct {
}

func (d *D) Connect() (A, error) {  // Returns A, not *C
    c := new(C)
    return c, nil
}
Salin selepas log masuk

Penaipan Struktural dalam Go

Penaipan struktur Go membolehkan struct melaksanakan antara muka tanpa mengisytiharkannya secara eksplisit. Ini boleh membawa kepada ralat jika kaedah dalam struct tidak sepadan dengan tandatangan antara muka.

Nota mengenai Jenis Argumen Antara Muka

Apabila menghantar objek kepada fungsi yang mengharapkan antara muka, jenis objek mesti melaksanakan antara muka itu. Dalam kes Equaler, jenis argumen Equal mesti sepadan dengan jenis antara muka, bukan sekadar jenis struct lain yang turut melaksanakan antara muka.

Atas ialah kandungan terperinci Mengapa Go Struct Tidak Melaksanakan Antara Muka jika Parameter Kaedah atau Jenis Pulangan Tidak Padan Sepenuhnya?. 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