[Golang] 用interface{}实现泛型出现的问题
生活随笔
收集整理的這篇文章主要介紹了
[Golang] 用interface{}实现泛型出现的问题
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
說明
在做一些實現(xiàn)的時候,碰到了一個棘手的問題,問題是這樣的,向一個函數(shù)里傳入slice和begin,end,返回slice[begin:end]。很明顯這是一個實現(xiàn)泛型的問題,但是在做具體實現(xiàn)的時候出現(xiàn)問題。
問題
根據(jù)問題,很容易寫下如下代碼:
func returnSlice([]interface{}, begin, end)[]interface{}{ //...具體實現(xiàn) }slice := returnSlice([]int{1,2,3,4},1,2) // 報錯:類型不匹配顯然上述代碼會報類型不匹配的錯誤,究其原因,是編譯器把[]int{1,2,3,4}作為interface{}看待了,而傳入的參數(shù)類型是[]interface{},所以類型不匹配。
解決方案
需要自己構(gòu)造一個將interface{}轉(zhuǎn)化為[]interface{}的函數(shù):
//將傳入slice的每個元素拿出來interface()化 func ToSlice(arr interface{}) []interface{} {v := reflect.ValueOf(arr)if v.Kind() != reflect.Slice {panic("toslice arr not slice")}l := v.Len()ret := make([]interface{}, l)for i := 0; i < l; i++ {ret[i] = v.Index(i).Interface()}return ret }再使用的時候,就可以slice := returnSlice(ToSlice([]int{1,2,3,4}),1,2)
總結(jié)
以上是生活随笔為你收集整理的[Golang] 用interface{}实现泛型出现的问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: framework7中a标签没反应
- 下一篇: 东归英雄传剧情介绍