問題陳述:
給定一個已編譯的Go 二進位檔案,是否可能動態編譯外部Go檔案並將其連結到現有二進位檔案以立即使用
解決方案:
2015 年8 月的Go 1.5 版本中引入了創建共享庫的功能,該庫支援動態加載和連結。
構建和鏈接的步驟動態:
創建共享庫:
使用以下指令將外部Go文件編譯為共享庫-buildmode=共享flag:
go install -buildmode=shared my_library.go
使用動態鏈接構建二進製文件:
編譯Go將使用-linkshared載入和連結共用程式庫的二進位檔案標誌:
go build -linkshared 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 }
範例:
範例:範例:範例:例如的以下程式碼:注意:共享庫必須在 Go 原始碼中使用 //export RunFoo 匯出函數 RunFoo。以上是Go 二進位檔案可以在執行時間動態載入和連結外部編譯的 Go 程式碼嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!