我有一个函数 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)
}
}