slice类型和sliceheader类型不能互相显式转换吗?

ddxx11223 · 2017-10-10 06:31:44 · 1376 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2017-10-10 06:31:44 的主题,其中的信息可能已经有所发展或是发生改变。

第一种情况:

sl:=[]int{1,2,3}
psl:=reflect.SliceHeader(sl)
fmt.Println(psl)

报错:cannot convert expression of type []int to type SliceHeader

第二种情况:

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类型不能互转?


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1376 次点击  
加入收藏 微博
8 回复  |  直到 2017-10-11 01:30:13
channel
channel · #1 · 7年之前

根据 go 的语法,一个 具名类型和 slice,这样强转肯定不行啊,编译器不允许

ddxx11223
ddxx11223 · #2 · 7年之前
channelchannel #1 回复

根据 go 的语法,一个 具名类型和 slice,这样强转肯定不行啊,编译器不允许

嗯,谢谢回答。sliceheader是个有三个成员变量的结构体,那slice内部是什么样子的?你说的这个具名类型存在的意义是啥?就只是为了这个sh := (*reflect.SliceHeader)(unsafe.Pointer(&s)) ?

channel
channel · #3 · 7年之前

slice 是编译器实现的,虽然内部结构和 sliceheader 类似。文档有说明,SliceHeader 在反射包中,是 slice 运行时的表示。

ystyle
ystyle · #4 · 7年之前
package main

func main() {
    num := 123456789
    x := 0
    for num != 0 {
        x = 10*x + num%10
        num = num / 10
    }
    print(x)
}
ystyle
ystyle · #5 · 7年之前
ystyleystyle #4 回复

```go package main func main() { num := 123456789 x := 0 for num != 0 { x = 10*x + num%10 num = num / 10 } print(x) } ```

不能修改的吗,回复错帖子了。。。

polaris
polaris · #6 · 7年之前
ystyleystyle #5 回复

#4楼 @ystyle 不能修改的吗,回复错帖子了。。。

嗯,没有提供修改的功能

ddxx11223
ddxx11223 · #7 · 7年之前
ystyleystyle #5 回复

#4楼 @ystyle 不能修改的吗,回复错帖子了。。。

修改?修改啥?

ddxx11223
ddxx11223 · #8 · 7年之前
channelchannel #3 回复

slice 是编译器实现的,虽然内部结构和 sliceheader 类似。文档有说明,SliceHeader 在反射包中,是 slice 运行时的表示。

原来如此,好的,谢谢!

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传