Go interface{} 轉切片類型的實現方法

遇到這樣一個情況想將變量v轉化為[]string類型

var v interface{}
a := []interface{}{"1", "2"}
v = a // v 這時還是interface{} 但其實是個 []interface{}
newValue := v.([]string)
fmt.Println(newValue)

 提示:

panic: interface conversion: interface {} is []interface {}, not []string [recovered]
panic: interface conversion: interface {} is []interface {}, not []string

提示我們不能直接換成[]string所以我們先轉化為[]interface{}

newValue := v.([]interface{})
fmt.Println(newValue)

打印: [1 50]

然後我們試圖將 []interface{} 轉化為[]string

newValue := v.([]interface{})
s := newValue.([]string)
fmt.Println(s)

提示:invalid type assertion: newValue.([]string) (non-interface type []interface {} on left)

這裡告訴我們隻有接口類型的才可以進行斷言所以這種方式是錯誤的

由於切片類型間不能互相直接轉化所以需要展開遍歷,然後對interface{}進行斷言

var v interface{}
var s []string
a := []interface{}{"1", "2"}
v = a // v 這時還是interface{} 但其實是個 []interface{}
for _, val := range v.([]interface{}) {
    s = append(s, val.(string))
}
fmt.Println(s)

到此成功轉化完成

總結:

interface{} 就算是個切片類型也不能直接遍歷,需要先轉化
切片之間不能互相轉化
接口類型的才可以進行斷言

到此這篇關於Go interface{} 轉 切片類型的文章就介紹到這瞭,更多相關Go interface{} 轉 切片類型內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: