猿问

切片(从有限数量的接口中选择一个)

我怎样才能让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

}


幕布斯6054654
浏览 177回答 2
2回答

SMILET

您可以定义第三个接口:type UpdaterLiver interface {    Updater    Liver}然后将定义更改RemoveDead为func RemoveDead(all []UpdaterLiver) []UpdaterLiver
随时随地看视频慕课网APP

相关分类

Go
我要回答