GobEncoder 通过 RPC 传递匿名函数
Posted
技术标签:
【中文标题】GobEncoder 通过 RPC 传递匿名函数【英文标题】:GobEncoder for Passing Anonymous Function via RPC 【发布时间】:2013-04-29 04:05:10 【问题描述】:我正在尝试构建一个系统,该系统将在多台机器上执行一个函数,通过 RPC 将函数匿名传递给每台工作机器(例如 MapReduce)以在某些数据子集上执行。 Gob 不支持编码函数,尽管 GobEncoder 的 docs 说“实现 GobEncoder 和 GobDecoder 的类型可以完全控制其数据的表示,因此可能包含诸如私有字段、通道和函数之类的东西,它们通常不会在 gob 流中传播”,所以这似乎是可能的。
有什么例子可以说明这可能是如何工作的吗?我不太了解应该如何使用 Gob 进行这种编码/解码。
【问题讨论】:
【参考方案1】:恕我直言,这行不通。虽然如果您的类型实现 GobEn,Decoder 它可以(反)序列化未导出的结构字段 它仍然不可能(反)序列化代码:Go 是静态编译和链接的 运行时代码生成功能(这将绕过编译时类型 安全)。
简短:您不能序列化函数,只能序列化数据。您的工人必须提供 您不想执行的功能。看看 encoding/rpc。
【讨论】:
【参考方案2】:您可能想尝试 GoCircuit,它提供的框架基本上可以让您执行此操作:
http://www.gocircuit.org/
它的工作原理是将你的二进制文件复制到远程机器上,启动它,然后执行一个有效地表示“使用参数 A、B、... 执行函数 X”的 RPC
【讨论】:
以上是关于GobEncoder 通过 RPC 传递匿名函数的主要内容,如果未能解决你的问题,请参考以下文章