Menyusun dan Memautkan Secara Dinamik daripada Perduaan Go
Dalam senario ini, kami mempunyai perduaan Go sedia ada yang memerlukan penyusunan dan pemautan fail Go luaran pada masa jalan. Matlamatnya adalah untuk memuatkan kod yang disusun secara dinamik ke dalam binari untuk kegunaan seterusnya.
Dalam versi Go sebelumnya, proses ini tidak disokong. Walau bagaimanapun, dengan pengenalan Go 1.5, penciptaan dan pemautan perpustakaan kongsi menjadi mungkin.
Seperti yang dinyatakan dalam ceramah "The State of Go" oleh Andrew Gerrand:
Dikongsi Perpustakaan dalam Go 1.5
$ go install -buildmode=shared std
$ go build -linkshared hello.go $ ls -l hello -rwxr-xr-x 1 adg adg 13926 May 26 02:13 hello
Dengan Go 1.5, kod yang disusun daripada fail Go luaran boleh dimuatkan secara dinamik ke dalam binari dengan memasukkan kod berikut:
package main import ( "fmt" "syscall" ) func main() { // Load the external shared library lib, err := syscall.LoadLibrary("myexternallibrary.so") if err != nil { panic(fmt.Sprintf("Error loading library: %v", err)) } defer syscall.FreeLibrary(lib) // Get the function pointer from the library sym, err := syscall.GetProcAddress(lib, "runFoo") if err != nil { panic(fmt.Sprintf("Error getting function pointer: %v", err)) } // Execute the function _, _, err = syscall.Syscall(sym, 0, 0, 0, 0) if err != nil { panic(fmt.Sprintf("Error calling function: %v", err)) } }
Dalam kod yang disediakan, "myexternallibrary.so" ialah nama perpustakaan kongsi yang mengandungi fungsi "runFoo". Pendekatan ini membolehkan kami menyusun dan memautkan kod Go luaran secara dinamik ke dalam binari sedia ada semasa masa jalan, menyelesaikan masalah awal.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyusun dan Memautkan Kod Go Luaran Secara Dinamik ke dalam Perduaan Go semasa Runtime?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!