可以使用 Go 实现 VPP 插件吗?

Posted

技术标签:

【中文标题】可以使用 Go 实现 VPP 插件吗?【英文标题】:Can VPP plugins be implemented using Go? 【发布时间】:2019-03-13 09:56:29 【问题描述】:

VPP 提供用于开发自定义插件的 I/S,这些插件可以连接到节点图中。我只看到过用 C 语言编写的此类插件的示例,并且想知道是否也可以使用其他语言(例如 Go)来编写此类插件。

【问题讨论】:

【参考方案1】:

我不知道“VPP”是什么,但答案是:“也许”;原因如下:

Go 代码能够通过其称为 cgo 的工具与 C 库进行交互。

cgo 是一个多面的东西:它允许你以某种方式“导出”某些 Go 函数,以便可以从 C 端调用它们,它允许你从 C 端调用函数。它还允许您编写一些内联 C 代码,以便在必要时为 C 端提供胶水。

自从一段时间以来,Go 构建工具集(至少是它的“参考”实现)提供了将 Go 代码编译成具有 C 兼容 API 的静态或动态库。

见this。

考虑到这些,理论上,应该可以做你想做的事。 注意一些可能的障碍:

大多数时候,如果“平台”允许您用 C 编写“插件”,则前提是您的插件将广泛使用平台自己的 API。

这通常意味着你的插件应该包含平台提供的某些头文件。

平台可能还要求您的插件链接到某个平台提供的库(通常是共享的)或库。

cgo 可以完成上述所有操作,但您需要仔细检查平台提供的 API,并可能编写 Go 助手以使其对 Go 代码的使用更加自然。

构建/链接问题(通常是头文件和库的位置)也可能需要解决。

【讨论】:

以上是关于可以使用 Go 实现 VPP 插件吗?的主要内容,如果未能解决你的问题,请参考以下文章

#导入MD文档图片#Cobra + Client-go实现K8s 自定义插件开发

求助Cytoscape软件中的ClueGO插件使用方法

go-micro 动态加载插件源码分析

vpp中plugin的api编程

golang插件化方案

如何在 Go 语言中用 Beats 开发 Logstash 插件