说“我正在运行清漆,我想从清漆子程序中调用Go代码”。将会在每个vcl_recv
子例程中运行?
答案 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。