Rumah >pembangunan bahagian belakang >Golang >Bolehkah perduaan Go memuatkan dan memautkan kod Go yang disusun secara luaran secara dinamik semasa masa jalan?
Pernyataan Masalah:
Memandangkan binari Go yang disusun, adakah mungkin untuk menyusun fail Go luaran secara dinamik dan memautkannya ke binari sedia ada untuk segera pelaksanaan?
Penyelesaian:
Keupayaan untuk mencipta perpustakaan kongsi, yang membolehkan pemuatan dan pemautan dinamik, telah diperkenalkan dalam Go versi 1.5 pada Ogos 2015.
Langkah untuk Membina dan Memaut Secara dinamik:
Buat Pustaka Dikongsi:
Kompilasi fail Go luaran sebagai perpustakaan kongsi menggunakan -buildmode=shared bendera:
go install -buildmode=shared my_library.go
Bina Perduaan dengan Pautan Dinamik:
Kompilkan Langkah binari yang akan memuatkan dan memautkan perpustakaan kongsi menggunakan fail -linkshared bendera:
go build -linkshared main.go
Contoh:
Pertimbangkan kod berikut dalam main.go:
package main import ( "fmt" "plugin" ) func main() { p, err := plugin.Open("my_library.so") if err != nil { fmt.Println(err) return } runFoo, err := p.Lookup("RunFoo") if err != nil { fmt.Println(err) return } runFoo.(func())() // Call the exported function from the shared library }
Nota: Pustaka kongsi mesti mengeksport fungsi RunFoo menggunakan //eksport RunFoo dalam kod sumber Go.
Atas ialah kandungan terperinci Bolehkah perduaan Go memuatkan dan memautkan kod Go yang disusun secara luaran secara dinamik semasa masa jalan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!