第一种情况:
``` go
sl:=[]int{1,2,3}
psl:=reflect.SliceHeader(sl)
fmt.Println(psl)
```
报错:cannot convert expression of type []int to type SliceHeader
第二种情况:
``` go
var psl []int
sl:=[]int{1,2,3}
psl=reflect.SliceHeader(sl)
fmt.Println(psl)
```
报错:
cannot convert expression of type []int to type SliceHeader;
cannot use reflect.SliceHeader(sl) (type SliceHeader) as type []int in assignment
初学go,为什么sliceheader类型和slice类型不能互转?
更多评论
嗯,谢谢回答。sliceheader是个有三个成员变量的结构体,那slice内部是什么样子的?你说的这个具名类型存在的意义是啥?就只是为了这个`sh := (*reflect.SliceHeader)(unsafe.Pointer(&s))` ?
#2
slice 是编译器实现的,虽然内部结构和 sliceheader 类似。文档有说明,SliceHeader 在反射包中,是 slice 运行时的表示。
#3