我想变得“聪明”,但目前我被困住了:D
我有不同类型的切片并编写了一个函数来消除这些切片中的重复项。
我创建了一个接口,它定义了一个返回标识符的函数。
我的消除重复功能是针对该接口实现的。
但是在尝试编译时,我得到一个错误,我不完全确定如何解决这个问题。
package main
type IDEntity interface {
EntityID() int64
}
type Foobar struct {
ID int64
}
func (s *Foobar) EntityID() int64 {
return s.ID
}
func EliminateDuplicatesInSlice(sliceIn []*IDEntity) []*IDEntity {
m := map[int64]bool{}
for _, v := range sliceIn {
if _, seen := m[v.EntityID()]; !seen {
sliceIn[len(m)] = v
m[v.EntityID()] = true
}
}
// re-slice s to the number of unique values
sliceIn = sliceIn[:len(m)]
return sliceIn
}
func main() {
foo1 := &Foobar{
ID: 1,
}
foo2 := &Foobar{
ID: 2,
}
foo3 := &Foobar{
ID: 3,
}
testSlice := []*Foobar{foo1, foo2, foo2, foo3}
EliminateDuplicatesInSlice(testSlice)
}
输出是:
go run test.go
# command-line-arguments
./test.go:19: v.EntityID undefined (type *IDEntity is pointer to interface, not interface)
./test.go:21: v.EntityID undefined (type *IDEntity is pointer to interface, not interface)
./test.go:45: cannot use testSlice (type []*Foobar) as type []*IDEntity in argument to EliminateDuplicatesInSlice
我最困惑的是(type *IDEntity is pointer to interface, not interface)。
有人可以澄清一下吗?
人到中年有点甜
相关分类