从 Go 二进制文件动态构建和链接
考虑一种情况,您有一个现有的 Go 二进制文件并且需要将外部代码合并到其中动态地。这可以通过编译外部 Go 文件并将其链接到现有二进制文件来实现。
编译外部 Go 文件
Go 1.5 于 2015 年 8 月发布后,支持将介绍共享库。使用 -buildmode=shared 标志,您可以将外部 Go 文件构建为共享库:
go install -buildmode=shared external.go
链接编译代码
链接编译的共享库对于现有的二进制文件,在构建期间使用 -linkshared 标志过程:
go build -linkshared main.go
示例用法
在给定的示例中,主二进制文件将包含以下代码:
func main() { // Compile external package containing runFoo() pkg, err := build.Import("github.com/example/external", "", build.ImportModeShared) if err != nil { // Handle error } // Get runFoo function from compiled package runFoo := reflect.ValueOf(pkg.Func("runFoo")) // Call the compiled runFoo function runFoo.Call(nil) // Continue execution normally }
此方法允许您动态地将新功能合并到现有的 Go 二进制文件中,而无需重建整个程序。
以上是如何将外部 Go 代码动态链接到现有的 Go 二进制文件?的详细内容。更多信息请关注PHP中文网其他相关文章!