如何从清漆子程序调用Go程序

时间:2019-01-22 11:03:49

标签: go varnish varnish-vcl

说“我正在运行清漆,我想从清漆子程序中调用Go代码”。将会在每个vcl_recv子例程中运行?

1 个答案:

答案 0 :(得分:2)

根据我从Varnish文档中收集的信息,在FFI中使用VMODs的一种正式方法是使用-buildmode=c-shared V arnish Mod ules

一个人可能以C语言编写VMOD(也许是在server.xml的帮助下,能够将VCC转换为纯C语言)。

仍然,您可以探索两种方法来将Go纳入该组合:

  • 使用cgo模式编译Go代码,以生成具有C兼容接口的vmodtool.py文件。

    这种方法将创建一个“独立式”的Varnish模块, 它不依赖.so,而只是从库中导出与C兼容的API。

    但这是可行的,但您需要“镜像” Varnish提供的某些数据结构,也许您需要从模块中调用 into Varnish API。 因此,下一种方法似乎更可行。

  • 使用{{3}}通过Varnish导出的C API连接Go代码。据说您仍然需要使用libc

总而言之,最好先使用我链接到的Varnish书中记录的本机VMOD。


我还要指出以下几点:

  • 我对VMOD没有任何个人经验。 从源代码构建Varnish时,很可能应该将它们静态链接。

    如果是这样,则需要使用-buildmode=c-shared

  • 看来,做自己想做的事情是件艰难的事 为您而战,所以我会认真考虑将您在Go中实现的任何算法移植到该特定于Varnish的VCC。