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