map [Task] int64其中Task是一个接口

假设我在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(它们在库内部,在库之外没有任何意义)。


小唯快跑啊
浏览 183回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go