我正在尝试构建一个系统,该系统将在多台机器上执行一个函数,通过 RPC 匿名地将函数传递给每个工作机器(a la MapReduce)以在某些数据子集上执行。Gob 不支持编码函数,尽管 GobEncoder 的文档说“实现 GobEncoder 和 GobDecoder 的类型可以完全控制其数据的表示,因此可能包含诸如私有字段、通道和函数之类的东西,它们不是通常可以在采空区流中传播”,所以这似乎是可能的。
这可能如何工作的任何例子?我不太了解应该如何使用 Gob 进行这种编码/解码。
恕我直言,这行不通。虽然如果你的类型实现 Gob{En,De}coder 确实可以(反)序列化未导出的结构字段,但仍然不可能(反)序列化代码:Go 是静态编译和链接的,没有运行时代码生成功能(其中会规避编译时类型安全)。
简短:您不能序列化函数,只能序列化数据。您的工人必须提供您不想执行的功能。看一下编码/rpc。
你可能想试试 GoCircuit,它提供了一个框架,基本上可以让你这样做:
它的工作原理是将您的二进制文件复制到远程机器,启动它,然后执行一个有效地表示“使用参数 A、B、... 执行函数 X”的 RPC