我有一个removeFrom
从切片中删除项目的函数。它接受一个float64
切片和一个索引:
func removeFrom(slice []float64, index int) []float64 {
if len(slice) > index {
return append(slice[:index], slice[index+1:]...)
}
}
Run Code Online (Sandbox Code Playgroud)
它工作正常,但现在我也必须从整数切片中删除。那么我该如何更改它以接受两种类型(并返回给定类型的切片)?我尝试使用空接口,但显然我必须在函数内部进行一些转换,但我不知道如何去做。
简短的回答?你不能。
长答案,你仍然不能直接做到这一点,但是:
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)
}
}
Run Code Online (Sandbox Code Playgroud)