Invokasi Dinamik Kaedah pada Nilai Antara Muka
Dalam Go, kaedah memanggil secara dinamik pada objek boleh menjadi mencabar apabila berurusan dengan nilai antara muka{}. Masalah ini timbul apabila jenis asas antara muka tidak diketahui secara eksplisit.
Dalam contoh kod yang disediakan, fungsi Pass() gagal untuk menggunakan kaedah Finish() pada objek jenis Test apabila objek sedang dibenamkan dalam nilai{} antara muka. Ini kerana API pantulan tidak boleh mengakses secara langsung alamat objek apabila ia dirujuk sebagai antara muka{}.
Untuk menyelesaikan isu ini, kita perlu mempertimbangkan jenis nilai asas antara muka. Selain itu, kerana kaedah boleh dilaksanakan dengan sama ada penerima nilai atau penunjuk, kita perlu mengendalikan kedua-dua kes secara dinamik.
Menggunakan refleksi, kita boleh mendapatkan nilai asas antara muka (nilai) dan mencipta penunjuk kepadanya ( ptr). Kemudian, kita boleh menyemak kewujudan kaedah pada kedua-dua nilai dan jenis penunjuk.
Fungsi CallMethod() yang diubah suai dengan berkesan mengendalikan senario ini:
Penyelesaian ini membolehkan kami untuk menggunakan kaedah secara dinamik pada objek, tanpa mengira nilai asas atau jenis penerimanya, dengan bekerja dengan kedua-dua jenis nilai dan penunjuk.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan Kaedah Secara Dinamik pada Nilai{} Antara Muka dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!