Rumah > Artikel > pembangunan bahagian belakang > Bolehkah Pengaturcara Go Menggunakan Fungsi daripada Perpustakaan Luaran?
Memanggil Fungsi Luaran daripada Go: Meneroka Fail Objek .so
Adakah mungkin untuk menyepadukan fungsi berasaskan C yang disimpan dalam objek .so fail dalam kod Go? Soalan ini telah mencetuskan rasa ingin tahu dalam kalangan pembangun Go, tetapi mencari penyelesaian yang jelas boleh menjadi satu cabaran.
Satu pendekatan yang biasa dicadangkan melibatkan penggunaan fungsi "syscall.LoadLibrary", tetapi percubaan ini sering membawa kepada ralat fungsi yang tidak ditentukan. Selepas siasatan lanjut dalam Godocs, ternyata pakej "syscall" tidak mempunyai fungsi "LoadLibrary".
Jadi, bolehkah pengaturcara Go masih memanfaatkan fungsi daripada perpustakaan luaran? Sudah tentu! Platform POSIX menawarkan penyelesaian yang menjanjikan menggunakan gabungan CGO dan fungsi seperti "dlopen." Mari kita teliti contoh untuk menerangkan pendekatan ini:
<code class="go">// #cgo LDFLAGS: -ldl // #include <dlfcn.h> import "C" import fmt func foo() { handle := C.dlopen(C.CString("libfoo.so"), C.RTLD_LAZY) bar := C.dlsym(handle, C.CString("bar")) fmt.Printf("bar is at %p\n", bar) }</code>
Dengan menggunakan "CGO" dan mentakrifkan fungsi C yang diperlukan, kami boleh memuatkan perpustakaan luaran secara dinamik dan mengakses fungsinya dengan lancar dalam kod Go. Ini membuka kemungkinan untuk menyepadukan fungsi berasaskan C sedia ada ke dalam aplikasi Go, membuka kunci kemungkinan baharu untuk pembangunan.
Atas ialah kandungan terperinci Bolehkah Pengaturcara Go Menggunakan Fungsi daripada Perpustakaan Luaran?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!