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
Barbara Streisandasal
2024-12-15 11:18:11795semak imbas

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
}

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!

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