Mencipta Fungsi dengan Penerima Secara Dinamik dalam Go
Dalam Go, kaedah ialah fungsi dengan penerima, yang mewakili objek di mana kaedah sedang dipanggil. Timbul persoalan sama ada boleh membuat kaedah pada masa jalan.
Pakej Reflect
Pakej reflect menyediakan kemudahan untuk memanipulasi jenis dan nilai dalam Go. Ia menawarkan fungsi MakeFunc, yang membolehkan penciptaan fungsi dinamik. Walau bagaimanapun, MakeFunc tidak boleh mencipta fungsi dengan penerima.
Keterbatasan Penciptaan Kaedah Runtime
Jawapannya, malangnya, tidak. Had ini berpunca daripada cara Go mengurus set kaedah. Jika kaedah boleh dibuat secara dinamik, set kaedah jenis akan berubah semasa masa jalan, bercanggah dengan pemeriksaan jenis masa kompilasi Go. Tambahan pula, semakan pelaksanaan antara muka masa jalan akan diperlukan untuk setiap panggilan fungsi yang melibatkan argumen antara muka.
Pendekatan Alternatif: Memotong Pakej 'refleksi'
Secara teori, seseorang boleh garpu pakej reflect untuk mencipta nilai yang mewakili kaedah yang dilampirkan pada sebarang jenis. Walau bagaimanapun, ini akan memintas sistem jenis Go dan tidak akan mengubah set kaedah jenis itu secara semula jadi.
Menukar Penunjuk Kaedah pada Objek
Tidak seperti bahasa lain tertentu, Go tidak benamkan jadual penghantaran kaedah maya dalam nilai konkrit (hanya dalam nilai antara muka). Walau bagaimanapun, adalah mungkin untuk mengakses dan mengubah suai medan itable bagi reflect.nonEmptyInterface, membenarkan pertukaran penunjuk kaedah pada objek.
Atas ialah kandungan terperinci Bolehkah Buat Kaedah dengan Penerima Secara Dinamik pada Runtime?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!