VPP插件可以用Go实现吗?
Can VPP plugins be implemented using Go?
VPP 提供 I/S 用于开发可以连接到节点图中的自定义插件。我只看过用C语言编写的此类插件的示例,想知道是否也可以使用其他语言(例如Go)来编写此类插件。
我不知道 "VPP" 是什么,但答案是:"maybe";原因如下:
Go 代码能够通过其称为 cgo
.
的工具与 C 库交互
cgo
是一个多方面的东西:它允许你以某种方式 "export" 某些 Go 函数,以便它们可以从 C 端调用,它允许你调用C端的功能。它还允许您编写一些内联 C 代码,以便在必要时为 C 端提供粘合。
从一段时间以来,Go 构建工具集(至少它的 "reference" 实现)提供了将 Go 代码编译成与 C 兼容的静态或动态库的功能 API。
参见this。
考虑到这些,理论上应该可以实现您想要的。
注意一些可能的障碍:
大多数情况下,如果 "platform" 允许您用 C 编写 "plugin",则假定您的插件将广泛使用平台自己的 API.
这通常意味着您的插件应该包含平台提供的某些头文件。
该平台可能还需要您的插件 link 针对某些平台提供的库(通常是共享的)或库。
cgo
可以完成上述所有操作,但您需要仔细检查平台提供的 API 并可能编写 Go 帮助程序以使其在 Go 代码中的使用更加自然。
Building/linking 问题(通常是头文件和库的位置)也可能是一个需要解决的问题。
VPP 提供 I/S 用于开发可以连接到节点图中的自定义插件。我只看过用C语言编写的此类插件的示例,想知道是否也可以使用其他语言(例如Go)来编写此类插件。
我不知道 "VPP" 是什么,但答案是:"maybe";原因如下:
Go 代码能够通过其称为
的工具与 C 库交互cgo
.cgo
是一个多方面的东西:它允许你以某种方式 "export" 某些 Go 函数,以便它们可以从 C 端调用,它允许你调用C端的功能。它还允许您编写一些内联 C 代码,以便在必要时为 C 端提供粘合。从一段时间以来,Go 构建工具集(至少它的 "reference" 实现)提供了将 Go 代码编译成与 C 兼容的静态或动态库的功能 API。
参见this。
考虑到这些,理论上应该可以实现您想要的。 注意一些可能的障碍:
大多数情况下,如果 "platform" 允许您用 C 编写 "plugin",则假定您的插件将广泛使用平台自己的 API.
这通常意味着您的插件应该包含平台提供的某些头文件。
该平台可能还需要您的插件 link 针对某些平台提供的库(通常是共享的)或库。
cgo
可以完成上述所有操作,但您需要仔细检查平台提供的 API 并可能编写 Go 帮助程序以使其在 Go 代码中的使用更加自然。
Building/linking 问题(通常是头文件和库的位置)也可能是一个需要解决的问题。