以python为例,C / C ++程序可以动态加载libpython.so并创建python VM,然后将用户脚本提供给python VM。
他们是这样使用go的方式吗?即,从用户的系统环境动态加载它。
我们想要嵌入到项目中进行脚本编写,但我们不想将其打包到最终的二进制程序中。
谢谢。
答案 0 :(得分:2)
在某些平台(例如Linux)上,您可以使用-buildmode=c-shared
构建Go代码,以获取共享库,然后可以将该库链接到用另一种语言(如C)编写的程序中。
一些示例和文档在这里:https://github.com/vladimirvivien/go-cshared-examples
请注意,这并不能使Go成为脚本语言-您仍然需要从Go代码构建共享库。但是,可以想象在应用程序运行时构建它们,并使用dlopen()
和dlsym()
加载它们。这与通过从应用程序内部启动C编译器然后加载它来编译C代码的方式相同。