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
Susan Sarandonasal
2024-12-01 11:33:10752semak imbas

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{} }

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()

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!

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