Rumah  >  Artikel  >  pembangunan bahagian belakang  >  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

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

Barbara Streisand
Barbara Streisandasal
2024-10-27 05:25:03924semak imbas

Here are a few title options,  playing with the

Memahami Kaedah Antara Muka Jenis Pemulangan Tidak Padan

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:

  1. Laksanakan Antara Muka Dengan Tepat:

    • Tukar kaedah GetStringer() dalam Bar untuk mengembalikan fmt.Stringer secara langsung.
  2. Balut Jenis Konkrit dalam Jenis Baharu:

    • Buat jenis baharu, seperti MyBar, yang membenamkan Bar dan melaksanakan StringerGetter menggunakan kaedah GetStringer() terbenam Bar. Ini membolehkan anda mematuhi antara muka sambil mengekalkan kefungsian Bar.
  3. Gunakan Penegasan:

    • Tegaskan jenis konkrit Bar untuk menaip fmt.Stringer sebelum mengembalikannya daripada kaedah GetStringer(). Ambil perhatian bahawa penyelesaian ini mempunyai potensi prestasi dan implikasi masa jalan.

Pertimbangan Penting:

  • Antara muka hanya menentukan tandatangan kaedah, bukan pelaksanaan kaedah.
  • Jika jenis konkrit melaksanakan kaedah dengan tandatangan yang berbeza daripada antara muka yang diperlukan, ia tidak dianggap sebagai pelaksanaan antara muka.
  • Jenis penegasan boleh berguna dalam senario tertentu , tetapi harus digunakan dengan berhati-hati untuk mengelakkan ralat masa jalan dan overhed prestasi.

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!

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