是否可以从Python提供Go接口的实现?

时间:2013-12-19 13:27:26

标签: python api plugins go

我有一个Go lib,它对变量数据进行并发处理,我有一个(简化的)接口:

type Handler interface {
    Accepts(id []byte) bool
    ProcessUnit(u []byte) []byte
}

目前,库最终开发人员(用户)可能会编写实现此接口的代码,并且库可以在最终开发人员数据结构上工作。

现在真正的问题:(允许跳过开销),是否有可能提供用另一种语言编写的接口的实现(考虑到Python)?我的目的是提供一个“插件API”,这样任何人都可以添加处理程序,例如:Python(或可能是其他语言)

我已经有了一个使用zeromq来传递go< - > python数据的工作实现,但这感觉“非自然”。我想要实现的乌托邦是一个lib用户将plugins.py文件放在预定义的位置,并且可以在启动时自动加载插件,是否可能或者我看错了方向?

1 个答案:

答案 0 :(得分:1)

Go没有动态加载模块(至少在零和一阶近似中),所以不,你不能只是在某处放置一个plugins.py并加载Go程序并使用它,至少不是Go本身。 ..

...但是您可以使用go-python https://github.com/sbinet/go-python或goPy https://github.com/qur/gopy,这应该允许您从Go运行python解释器并且python解释器可以做动态模块加载。

,这将在Go和Python之间有些变得有点丑陋。但是应该可行。

传递数据(zeromq或者直接通过包net / rpc)对我来说似乎并不“非自然”......

(旁注:如果有人可以编写正确的Python代码并获得一些帮助来理解指针,他应该能够在几天内编写Go代码。)