假设我在Go库中定义了以下接口:type Task interface { Do() error}func Register(task Task) { ... }func GetId(task Task) int64 { ... }在中Register(),库将唯一性int64与每个任务实例相关联。GetId()必须返回给定任务的标识符。我最初的想法是将关联存储为map[Task]int64。这似乎工作正常,但有人告诉我,如果实现的对象Task不具有相等可比性(例如,struct包含a的a map),则它将中断。我仍然需要检查这是否正确。我打算尝试使用的一部分,struct { task Task; id int64 }而只是对其进行迭代,但这仍然需要相等的可比Task实例。而且AFAIU在Go中没有身份比较。如何从Task实例到实例ID进行可靠的映射?编辑:到目前为止,这两种解决方案都可以使用,但是它们的缺点是每个Task实现都必须包含一些重复的代码来处理ID。我可以在struct可以嵌入的TaskBase中提供该代码,但理想情况下,我希望解决方案不需要实现甚至知道ID(它们在库内部,在库之外没有任何意义)。
1 回答
- 1 回答
- 0 关注
- 183 浏览
添加回答
举报
0/150
提交
取消