0
我有以下代码来加倍切片。如何确定切片接口{}的元素类型?
func doubleSlice(s []int) []int {
t := make([]int, len(s), (cap(s) + 1) * 2)
for i := range s {
t[i] = s[i]
}
return t
}
我想使功能加倍任何类型的切片。我首先需要知道元素类型。
func showInterfaceItem(s interface{}) interface{} {
if reflect.TypeOf(s).Kind() != reflect.Slice {
fmt.Println("The interface is not a slice.")
return
}
var t interface{}
newLen := reflect.ValueOf(s).Len()
newCap := (cap(reflect.ValueOf(s).Cap()) + 1) * 2
t = make([]reflect.TypeOf(s), newLen, newCap)
return t
}
的reflect.TypeOf(s)
返回接口{类型},而不是元件的类型。我如何获得切片界面的元素类型?
这不是完全清楚你已经尝试过?你在一个没有回归变量的函数中返回值? 'func showInterfaceItem(s interface {})({{here here}}){' – silvergasp
我想实现自动检查元素类型。如果's'是'[] int','t'是'[] int'。如果's'是'[] float32','t'是'[] float32'。 – firelyu
我想你误解了我的问题......你的函数不会编译。它正在返回一个值'return t',但是没有返回值是你的函数 – silvergasp