第三方库(闭源)



有没有办法用go语言构建一个二进制文件(共享或静态库),其中包含一堆源文件,并将其与它的接口一起分发。

它不是作为可执行文件分发的,而是在编译或运行时带有接口的可链接静态或共享库。(就像在 C 中一样,您将.a.so文件与头文件一起分发)

与基于开源 github 的库不同,它是一个闭源项目,我正在尝试为 Go 移植。

是的,这是可能的.您可以将代码构建为静态库,并使用以下命令在运行时链接它:

go build -buildmode=plugin

你可以像这样使用内置插件:

符号是指向变量或函数的指针。

例如,一个插件定义为

package main
import "fmt"
var V int
func F() { fmt.Printf("Hello, number %dn", V) }

可以使用 Open 函数加载,然后可以访问导出的包符号 V 和 F

p, err := plugin.Open("plugin_name.so")
if err != nil {
panic(err)
}
v, err := p.Lookup("V")
if err != nil {
panic(err)
}
f, err := p.Lookup("F")
if err != nil {
panic(err)
}
*v.(*int) = 7
f.(func())() // prints "Hello, number 7"

type Symbol interface{}

查看内置的插件支持 Go 了解更多信息

相关内容

  • 没有找到相关文章

最新更新