现在我知道我错了,
[]type是一个整体类型,不能视为[]interface{}。
是的,那是因为
interface{}它是它自己的类型(而不是其他任何类型的“别名”)。正如我在“golang中的含义是
interface{}什么?”(如果v是
interface{}变量)中提到的那样:导致地鼠的人相信“
v任何类型”,但这是错误的。v不是任何类型;它是interface{}类型的。
在常见问题中提到
它们在内存中没有相同的表示 。
有必要 将元素分别复制到目标切片 。
此示例将int的切片转换为的切片interface{}:
t := []int{1, 2, 3, 4}s := make([]interface{}, len(t))for i, v := range t { s[i] = v}TomL提出了这个示例(在评论中:
package mainimport "fmt"func main() { x := []string{"a", "b", "c", "d"} fmt.Printf("%T: %vn", x, x) //converting a []string to a []interface{} y := make([]interface{}, len(x)) for i, v := range x { y[i] = v } fmt.Printf("%T: %vn", y, y) //converting a []interface{} to a []string z := make([]string, len(y)) for i, v := range y { z[i] = fmt.Sprint(v) } fmt.Printf("%T: %vn", z, z)}

![将[] string转换为[] interface {} 将[] string转换为[] interface {}](http://www.mshxw.com/aiimages/31/413089.png)
