遇到这样一个情况想将变量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{} 转 切片类型内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!