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