为了账号安全,请及时绑定邮箱和手机立即绑定

通过RPC传递不同类型的“基础”结构的惯用方法?

通过RPC传递不同类型的“基础”结构的惯用方法?

Go
慕姐8265434 2022-08-15 19:27:42
我正在设置一个客户端,该客户端对服务器进行RPC调用,该客户端在概念上使用a或a进行响应,但实际上只是单个基本结构类型。a 和 a 都有一个字段,但需要由客户端进行区分以进行下游处理。我想在 Go 中定义此结构的一种方式是:GetTaskMapTaskReduceTaskMapTaskReduceTaskfilenametype Task struct {  filename string  taskType string}其中要么是 或 。然后,客户端可以使用此结构类型上的一些帮助程序函数来确定它接收的类型:taskType"map""reduce"Taskfunc (t *Task) isMapTask() bool {  t.taskType == "map"}func (t *Task) isReduceTask() bool {  t.taskType == "reduce"}这将工作得相当好,并在结构类型中隐藏复杂性/实现细节。我看到的一个问题是,对于可以具有的值没有约束 - 因此客户端可以接收既不是Map也不是Reduce类型的。我担心的另一个问题是,我不确定这种结构是否存在一些我没有想到的陷阱。taskTypeTask我的问题是,上述结构对于围棋来说是否合理和/或惯用语?顺便说一句,我来自Ruby的OO背景,我可以想象Ruby伪代码中的以下结构:class BaseTaskclass MapTask < BaseTaskclass ReduceTask < BaseTask当然,这并不能很好地映射到Go。
查看完整描述

1 回答

?
胡说叔叔

TA贡献1804条经验 获得超8个赞

您可以实现的两个选项是:

  1. 你已经做了什么。它简单易读。如果客户端收到不受支持的类型的 taskType,它可以简单地返回错误

  2. 在客户端中使用两个结构,MapTask 和 ReduceTask,可以选择使用通用基础。可以使用两个单独的连线消息,也可以使用一个消息类型包含的消息。RPC 客户端处理程序可以根据消息类型将收到的消息转换为其中一个结构。


查看完整回答
反对 回复 2022-08-15
  • 1 回答
  • 0 关注
  • 75 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信