입니다 INT64 :지도 [작업] 작업이 이제 내가 이동 라이브러리에 다음과 같은 인터페이스를 정의한다고 가정 해 봅시다 인터페이스
Register()
에서
type Task interface {
Do() error
}
func Register(task Task) { ... }
func GetId(task Task) int64 { ... }
라이브러리 동료 각 작업 인스턴스가 고유 int64
. GetId()
은 주어진 작업에 대한 식별자를 반환해야합니다.
저의 초기 아이디어는 협회를 map[Task]int64
으로 저장하는 것이 었습니다. 이것은 잘 작동하는 것처럼 보이지만, Task
을 구현하는 객체가 동등 비교가 가능하지 않은 경우 (예 : map
을 포함하는 struct
) 파손될 것이라고 들었습니다. 나는 이것이 사실인지 여전히 점검 할 필요가있다.
대신에 struct { task Task; id int64 }
슬라이스를 사용하고 반복 해 보았습니다.하지만 여전히 동일한 평등이 필요합니다 (Task
인스턴스). 그리고 AFAIU는 Go에서 정체성 비교가 없습니다.
Task
인스턴스를 해당 ID로 어떻게 강하게 매핑 할 수 있습니까?
편집 : 두 솔루션 모두 지금까지 제안했지만 모든 태스크 구현에는 ID 처리를위한 반복적 인 코드가 포함되어야한다는 단점이 있습니다. 나는 그 코드를 임베디드 될 수있는 TaskBase struct
에 제공 할 수 있지만 이상적으로는 ID에 대해 알고있는 구현을 필요로하지 않는 솔루션을 선호합니다 (라이브러리 내부에 있으며 의미가없는).
더 간단한'map [int64] Task'를 사용하지 않는 이유는 무엇입니까? –
주어진 작업의 ID를 찾고 싶습니다. 반대가 아닙니다. –