go - 如何在没有泛型的情况下从任何 slice 中删除元素?

标签 go slice

<分区>

我有一个函数 removeFrom 可以从 slice 中删除一个项目。它接受一个 float64 slice 和一个索引:

func removeFrom(slice []float64, index int) []float64 {
    if len(slice) > index {
        return append(slice[:index], slice[index+1:]...)
    }
}

它工作正常,但现在我还必须从整数 slice 中删除。那么我该如何更改它以接受这两种类型(并返回给定类型的一部分)?我尝试使用空接口(interface),但显然我必须在函数内部进行一些转换,但我不知道如何进行。

最佳答案

简答?你不能。

答案很长,你仍然不能直接这样做,但是:

func removeFrom(slice interface{}, index int) interface{} {
    switch slice := slice.(type) {
    case []float64:
        if len(slice) > index {
            return append(slice[:index], slice[index+1:]...)
        }
    case []int64:
        if len(slice) > index {
            return append(slice[:index], slice[index+1:]...)
        }
    case []int:
        if len(slice) > index {
            return append(slice[:index], slice[index+1:]...)
        }
    default:
        log.Panicf("unknown type: %T", slice)
    }
}

关于go - 如何在没有泛型的情况下从任何 slice 中删除元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37376513/

相关文章:

sorting - 在 GoLang 中排序对

python - 对字符串进行切片并返回拼接后的字符串

go - 使用 "go get"下载二进制文件而不将它们添加到 go.mod

python - 如何在迭代列表末尾的连续切片时获取 Python 列表的最后一个切片

vector - 如何连接两个切片或两个向量并仍然可以访问原始值?

Julia 切片边界检查不一致

python - 在 Python 中使用切片更改多个 Numpy 数组元素

go - 上下文取消后等待函数结果

go filepath.Walk 行走行为

go - 错误检查后延迟的放置