Rumah > pembangunan bahagian belakang > Golang > Mengapa Mengembalikan Simbol Pemalam sebagai Fungsi Menyelesaikan Isu Pengikatan Antara Muka Pemalam Go?

Mengapa Mengembalikan Simbol Pemalam sebagai Fungsi Menyelesaikan Isu Pengikatan Antara Muka Pemalam Go?

Susan Sarandon
Lepaskan: 2024-12-01 11:33:10
asal
677 orang telah melayarinya

Why Does Returning a Plugin Symbol as a Function Solve Go Plugin Interface Binding Issues?

Simbol Pemalam sebagai Pengembalian Fungsi

Masalah

Apabila cuba mengimport pemalam yang melaksanakan antara muka yang ditakrifkan di luar kedua-dua pakej, mengikat simbol pemalam kepada antara muka gagal. Ini berlaku walaupun pelaksanaan struktur pemalam bagi antara muka.

Penyelesaian

Isu timbul daripada pendekatan mencari pembolehubah daripada pemalam, yang mengembalikan penunjuk kepada pembolehubah itu. Untuk menaip menegaskan antara muka daripada nilai jenis penunjuk ke antara muka tidak pernah berjaya. Sebaliknya, penyelesaiannya ialah mengeksport fungsi daripada pemalam yang mengembalikan jenis antara muka yang diingini.

func Greeter() iface.IPlugin { return testpl{} }
Salin selepas log masuk

Penjelasan

Pakej pemalam beroperasi dengan mengembalikan penunjuk kepada nilai apabila mencari pembolehubah. Untuk pembolehubah jenis iface.IPlugin, ini menghasilkan penuding kepada antara muka, yang tidak boleh ditaip ditegaskan kepada iface.IPlugin.

Dengan mengembalikan fungsi daripada pemalam, operasi carian tidak lagi memerlukan penuding . Fungsi itu kemudiannya boleh digunakan untuk mendapatkan nilai antara muka yang diingini.

Penggunaan

Untuk menggunakan pendekatan ini, definisi pemalam harus dikemas kini untuk mendedahkan fungsi yang mengembalikan pelaksanaan antara muka. Program kemudiannya boleh mencari fungsi ini dan menggunakannya untuk mendapatkan contoh penyambut.

// In the plugin
func Greeter() iface.IPlugin { return testpl{} }

// In the main program
Greeter, err := p.Lookup("Greeter")
if err != nil {
    panic(err)
}
greeterFunc, ok := Greeter.(func() iface.IPlugin)
if !ok {
    panic(errors.New("not of expected type"))
}
greeter := greeterFunc()
Salin selepas log masuk

Pendekatan ini mengelakkan kerumitan penegasan jenis tidak langsung dan kekeliruan yang disebabkan oleh penggunaan penunjuk. Selain itu, ia selaras dengan cara yang lebih intuitif untuk mendedahkan fungsi daripada pemalam.

Atas ialah kandungan terperinci Mengapa Mengembalikan Simbol Pemalam sebagai Fungsi Menyelesaikan Isu Pengikatan Antara Muka Pemalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan