我怎样才能让RemoveDead函数接受其他Liver对性能影响很小的接口片段(或者甚至是结构指针片段)?
在我看来,该函数必须将一个interface{}作为参数并进行运行时转换,但我不确定如何进行转换。我也猜测这样做x.(Liver)比 慢很多Liver(x),因为后者是编译时转换。
是复制粘贴函数并更改每个副本中的参数和返回类型的最佳解决方案吗?只需要三四个副本,但它仍然是一个非常笨拙的解决方案。
type Updater interface {
Liver
Update() bool
}
type Liver interface {
Alive() bool
}
func RemoveDead(all []Updater) []Updater {
for i := len(all) - 1; i >= 0; i-- {
if Liver(all[i]).Alive() == false {
all[i] = all[len(all)-1]
all = all[:len(all)-1]
}
}
return all
}
SMILET
相关分类