Dalam Go, struct melaksanakan antara muka jika ia melaksanakan semua kaedah antara muka tersebut. Walau bagaimanapun, jika kaedah struct mempunyai parameter yang melaksanakan antara muka, struct tidak akan melaksanakan antara muka.
package main type A interface { Close() } type B interface { Connect() (A, error) } type C struct { } func (c *C) Close() { } type D struct { } func (d *D) Connect() (*C, error) { c := new(C) return c, nil } func test(b B) { } func main() { d := new(D) test(d) }
Dalam contoh di atas, struct D tidak melaksanakan antara muka B kerana kaedah Connect bagi D mempunyai parameter yang melaksanakan antara muka A. Mesej ralat yang anda terima ialah:
cannot use d (type *D) as type B in argument to test: *D does not implement B (wrong type for Connect method) have Connect() (*C, error) want Connect() (A, error)
Untuk membetulkan ralat ini, anda perlu menukar jenis parameter dalam Connect kaedah D ke A.
type D struct { } func (d *D) Connect() (A, error) { c := new(C) return c, nil }
Kini, struct D akan melaksanakan antara muka B, dan anda akan dapat memanggil fungsi test() dengan nilai D sebagai hujah.
Atas ialah kandungan terperinci Adakah Go Struct Melaksanakan Antara Muka Jika Parameter Kaedah Melaksanakan Antara Muka Itu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!