Go tidak menyokong berbilang warisan, tetapi adalah mungkin untuk melaksanakan berbilang antara muka untuk satu jenis. Ini membolehkan anda menentukan jenis yang mematuhi keperluan berbilang antara muka.
Dalam contoh anda, anda mempunyai antara muka Kad dan struktur kad yang melaksanakan antara muka Kad. Anda mahu boleh menggunakan antara muka Kad untuk mewakili kad, tetapi anda juga mahu mempunyai perwakilan rentetan kad.
Untuk menyelesaikannya, anda boleh mentakrifkan antara muka Stringer:
type Stringer interface { String() string }
Dan kemudian minta struct kad melaksanakan kedua-dua antara muka Kad dan Stringer:
type card struct { cardNum int face string suit string } func (c *card) GetFace() string { return c.face } func (c *card) GetSuit() string { return c.suit } func (c *card) String() string { return fmt.Sprintf("%s%s", c.GetFace(), c.GetSuit()) }
Ini akan membolehkan anda menggunakan antara muka Kad untuk mewakili kad, dan anda juga boleh menggunakan antara muka Stringer untuk mendapatkan perwakilan rentetan kad.
Perhatikan bahawa pendekatan ini tidak menyembunyikan butiran pelaksanaan struktur kad. Jika anda ingin benar-benar menyembunyikan butiran pelaksanaan, anda boleh menggunakan fungsi kilang untuk mencipta nilai Kad, dan kemudian hanya mengembalikan antara muka Kad kepada pelanggan.
func NewCard(num int) Card { newCard := card{ cardNum: num, face: faces[num%len(faces)], suit: suits[num/len(faces)], } return &newCard }
Ini akan membolehkan anda mencipta nilai Kad tanpa mendedahkan butiran pelaksanaan struktur kad.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melaksanakan Pelbagai Antara Muka dalam Go untuk Satu Jenis?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!