Rumah >pembangunan bahagian belakang >Golang >Berikut ialah beberapa pilihan tajuk, bermain dengan \'Mengapa\' dan \'Bagaimana\' ralat: Penekanan pada \'Mengapa\' * Mengapa kod Go saya membuang \'tidak boleh digunakan... sebagai taip St
Mesej Ralat:
cannot use &f (type *Bar) as type StringerGetter in argument to Printer: *Bar does not implement StringerGetter (wrong type for GetStringer method) have GetStringer() *Foo want GetStringer() fmt.Stringer
Dalam Go, kaedah antara muka bergantung pada padanan jenis yang tepat. Ini bermakna fungsi yang mengembalikan antara muka mesti mempunyai jenis tepat yang sama dalam kedua-dua antara muka dan pelaksanaannya. Jika ia tidak sepadan, Go akan menjana ralat masa kompilasi.
Dalam kes ini, antara muka anda StringerGetter menentukan kaedah GetStringer() yang mengembalikan fmt.Stringer. Walau bagaimanapun, pelaksanaan Bar jenis konkrit anda bagi GetStringer() mengembalikan penunjuk kepada struct Foo, yang bukan fmt.Stringer. Ketidakpadanan ini menyebabkan ralat masa kompilasi.
Penyelesaian:
Laksanakan Antara Muka Dengan Tepat:
Balut Jenis Konkrit dalam Jenis Baharu:
Gunakan Penegasan:
Pertimbangan Penting:
Atas ialah kandungan terperinci Berikut ialah beberapa pilihan tajuk, bermain dengan 'Mengapa' dan 'Bagaimana' ralat: Penekanan pada 'Mengapa' * Mengapa kod Go saya membuang 'tidak boleh digunakan... sebagai taip St. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!